import { render } from '@testing-library/react';
import dayjs from 'dayjs';
import React from 'react';
import ReleaseScheduleOAPanel from '../release-schedule-oa-panel';
import type { ReleaseScheduleOAPanelProps } from '../release-schedule-oa-panel';

describe('<ReleaseScheduleOAPanel>', () => {
    const saleStartDate = dayjs('2023-02-21').toDate();
    const releaseDate = dayjs('2021-01-01').toDate();
    const preorderDate = dayjs('2000-01-01').toDate();

    const product = {
        productId: '2958087',
        productName: 'Vanishing Point',
        contextType: 'digital',
        releaseDate,
        saleStartDate,
        preorderDate,
        releaseSchedule: {
            timed: [],
            staggered: [],
            unsupportedTimed: [],
        },
    };

    const editable = true;

    const deliveryStores = [
        {
            id: '826',
            name: 'Spotify',
            supportsTimedRelease: true,
        },
        {
            id: '123',
            name: 'Apple',
            supportsTimedRelease: true,
        },
    ];
    const carvedOutStores = [
        {
            id: '123',
            name: 'Apple',
        },
    ];

    const defaultProps: ReleaseScheduleOAPanelProps = {
        product,
        deliveryStores,
        carvedOutStores,
        editable,
        error: false,
        loading: false,
        onEdit: jest.fn(),
        onSaveReleaseSchedule: jest.fn(),
        onUpdateProduct: jest.fn(),
    };

    const renderWrapper = (props: Partial<ReleaseScheduleOAPanelProps> = {}) =>
        render(<ReleaseScheduleOAPanel {...defaultProps} {...props} />);

    describe('preorderDate set and after saleStartDate', () => {
        describe('.ProductDetails-error', () => {
            test('renders', () => {
                const { queryByTestId } = renderWrapper({
                    product: {
                        ...product,
                        saleStartDate: dayjs('2022-01-01').toDate(),
                        preorderDate: dayjs('2022-01-02').toDate(),
                    },
                });
                expect(queryByTestId('preorderType-error')).toBeInTheDocument();
            });
        });
    });

    describe('preorderDate set and before saleStartDate', () => {
        describe('.ProductDetails-error', () => {
            test('does not render', () => {
                const { queryByTestId } = renderWrapper({
                    product: {
                        ...product,
                        saleStartDate: dayjs('2022-01-01').toDate(),
                        preorderDate: dayjs('2021-01-01').toDate(),
                    },
                });
                expect(
                    queryByTestId('preorderType-error')
                ).not.toBeInTheDocument();
            });
        });
    });
});
