import React from 'react';
import { render } from '@testing-library/react-native';
import ChristmasTheme from '../ChristmasTheme';
import useChristmasTheme from '../../../hooks/useChristmasTheme';

jest.mock('src/services/native/environment.nativeService', () => ({
    brand: () => 'orchard',
    environment: () => 'qa'
}));
jest.mock('../../../hooks/useChristmasTheme');

describe('ChristmasTheme', () => {
    const mockUseChristmasTheme = useChristmasTheme as jest.MockedFunction<
        typeof useChristmasTheme
    >;

    beforeEach(() => {
        jest.clearAllMocks();
    });

    test('renders snowflakes when Christmas theme is enabled', () => {
        mockUseChristmasTheme.mockReturnValue({
            isEnabled: true,
            showSnow: true,
            isAvailable: true,
            loading: false,
            setEnabled: jest.fn(),
            onCatalogueScreenDisplayed: jest.fn()
        });
        const { UNSAFE_root } = render(<ChristmasTheme />);

        expect(UNSAFE_root).toBeTruthy();
    });

    test('does not render when Christmas theme is disabled', () => {
        mockUseChristmasTheme.mockReturnValue({
            isEnabled: false,
            showSnow: false,
            isAvailable: false,
            loading: false,
            setEnabled: jest.fn(),
            onCatalogueScreenDisplayed: jest.fn()
        });
        const { toJSON } = render(<ChristmasTheme />);

        expect(toJSON()).toBeNull();
    });

    test('renders but fades out when showSnow is false', () => {
        mockUseChristmasTheme.mockReturnValue({
            isEnabled: true,
            showSnow: false,
            isAvailable: true,
            loading: false,
            setEnabled: jest.fn(),
            onCatalogueScreenDisplayed: jest.fn()
        });
        const { UNSAFE_root } = render(<ChristmasTheme />);

        expect(UNSAFE_root).toBeTruthy();
    });
});
