// @vitest-environment jsdom
import { afterEach, it, expect, vi } from 'vitest';
import { VirtualTryOnAPI } from './api';
import { TryOnRejectedError, TRY_ON_ERROR_CODES } from './tryOnErrors';
afterEach(() => vi.unstubAllGlobals());
it.each(TRY_ON_ERROR_CODES)('preserves rejection %s from the transport', async code => {
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ok: false, status: 422, json: async () => ({ error: 'cannot_generate', code, retryable: false })}));
  await expect(new VirtualTryOnAPI('/tryon', 'key', 'visitor').tryOnSync('WA==', 'WA==')).rejects.toEqual(new TryOnRejectedError(code, false));
});
it.each([
  [{error: 'cannot_generate'}, 'quality_failed'],
  [{error: 'bad_image'}, 'bad_image'],
  [{error: 'photo_body_hidden'}, 'photo_body_hidden'],
  [{error: 'cannot_generate', code: 'unknown'}, 'quality_failed'],
])('handles legacy Brain and error field codes', async (body, code) => {
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ok: false, status: 422, json: async () => body}));
  await expect(new VirtualTryOnAPI('/tryon', 'key', 'visitor').tryOnSync('WA==', 'WA==')).rejects.toMatchObject({code});
});
