import React from 'react';
import { waitFor } from '@testing-library/react';
import { renderInAppContext } from '@theorchard/suite-testing';
import * as getCreatedBulkSessionsQuery from 'src/data/queries/getCreatedBulkSessions';
import BulkSessionsSidecar from '..';
import { type BulkSession } from '../types';

describe('<BulkSessionsSidecar />', () => {
    const sessionData: BulkSession[] = [
        {
            id: '0d3fa5f1-5c91-4a91-ab24-bb2abf77d070',
            filename: 'bulk_upload_good_25824-1.xlsx',
            metadataStatus: 'valid',
            assetStatus: 'incomplete',
            ingestionStatus: null,
            assetsRequired: true,
            createdOn: '2025-06-03T10:51:06.000Z',
            totalProducts: 2,
            ingestionId: null,
            failedProductUploads: null,
        },
        {
            id: '131a800a-7084-4c3a-9976-9d21185b886f',
            filename: 'bulk_upload_good30.xlsx',
            metadataStatus: 'invalid',
            assetStatus: 'default',
            ingestionStatus: null,
            assetsRequired: true,
            createdOn: '2025-04-22T15:32:20.000Z',
            totalProducts: 3,
            ingestionId: null,
            failedProductUploads: null,
        },
        {
            id: '1d1c4215-38e2-4f1d-af91-fb24fdea368c',
            filename: 'bulk_upload_template-1ef4b125-aa94-474b-9a75.xlsx',
            metadataStatus: 'valid',
            assetStatus: 'default',
            ingestionStatus: null,
            assetsRequired: true,
            createdOn: '2025-04-21T23:24:15.000Z',
            totalProducts: 4,
            ingestionId: null,
            failedProductUploads: null,
        },
        {
            id: '46983095-a31f-4ec1-8b2c-111750a31ec4',
            filename: 'bulk_upload_good_25824.xlsx',
            metadataStatus: 'valid',
            assetStatus: 'skipped',
            ingestionStatus: null,
            assetsRequired: true,
            createdOn: '2025-06-04T10:32:14.000Z',
            totalProducts: 5,
            ingestionId: null,
            failedProductUploads: null,
        },
        {
            id: '5b641486-a51b-448d-b216-cd497e5d8ec5',
            filename: 'bulk_upload_good30.xlsx',
            metadataStatus: 'failure',
            assetStatus: 'default',
            ingestionStatus: null,
            assetsRequired: true,
            createdOn: '2025-04-22T14:45:41.000Z',
            totalProducts: 6,
            ingestionId: null,
            failedProductUploads: null,
        },
        {
            id: '86937b47-4bd3-49f4-8f44-f34779585c31',
            filename: 'bulk_upload_good_25824_single.xlsx',
            metadataStatus: 'valid',
            assetStatus: 'complete',
            ingestionStatus: null,
            assetsRequired: true,
            createdOn: '2025-06-12T09:56:19.000Z',
            totalProducts: 7,
            ingestionId: null,
            failedProductUploads: null,
        },
        {
            id: '86937b47-4bd3-49f4-8f44-f34779585c32',
            filename: 'bulk_upload_good_25824_single.xlsx',
            metadataStatus: 'valid',
            assetStatus: 'complete',
            ingestionStatus: 'in_progress',
            assetsRequired: true,
            createdOn: '2025-06-12T09:57:19.000Z',
            totalProducts: 8,
            ingestionId: null,
            failedProductUploads: null,
        },
        {
            id: '86937b47-4bd3-49f4-8f44-f34779585c33',
            filename: 'bulk_upload_good_25824_single.xlsx',
            metadataStatus: 'valid',
            assetStatus: 'complete',
            ingestionStatus: 'failure',
            assetsRequired: true,
            createdOn: '2025-06-12T09:58:19.000Z',
            totalProducts: 9,
            ingestionId: '86937b47-4bd3-49f4-8f44-f34779585c3',
            failedProductUploads: null,
        },
        {
            id: '86937b47-4bd3-49f4-8f44-f34779585c34',
            filename: 'bulk_upload_good_25824_single.xlsx',
            metadataStatus: 'valid',
            assetStatus: 'complete',
            ingestionStatus: 'success',
            assetsRequired: true,
            createdOn: '2025-06-12T09:59:19.000Z',
            totalProducts: 10,
            ingestionId: null,
            failedProductUploads: null,
        },
    ];

    describe('Component renders', () => {
        let useQueryFn: jest.SpyInstance;
        beforeAll(() => {
            jest.spyOn(Date.prototype, 'toLocaleDateString').mockImplementation(
                function (this: Date) {
                    return this.toISOString();
                }
            );
        });
        afterAll(() => {
            jest.restoreAllMocks();
        });
        beforeEach(() => {
            useQueryFn = jest
                .spyOn(
                    getCreatedBulkSessionsQuery,
                    'useGetCreatedBulkSessionsQuery'
                )
                .mockReturnValue(jest.fn().mockResolvedValue(sessionData));
        });
        test('matches snapshot', async () => {
            const component = renderInAppContext(<BulkSessionsSidecar />);
            await waitFor(() => expect(useQueryFn).toHaveBeenCalled());
            expect(component).toMatchSnapshot();
        });
    });
});
