import React from 'react';
import { fireEvent, screen } from '@testing-library/react';
import { renderInAppContext } from '@theorchard/suite-testing';
import ContractAdmin, { ContractAdminProps } from '../contract-admin';
import {
    ADD_SALESFORCE_ID_INFO_ALERT_MSG,
    SALESFORCE_USED,
} from 'src/components/advance-detail/constants';

describe('ContractAdmin', () => {
    const render = (props: ContractAdminProps) =>
        renderInAppContext(<ContractAdmin {...props} />);

    const props = {
        changeHandler: jest.fn(),
        disabled: false,
        isFeatureAbacusCreateAndApprovePaymentsEnabled: true,
        lastModifiedByIdentityName: 'Identity Name',
        lastModified: '2024-04-05',
        salesforceId: 'salesforceId-123',
        updateWorksheetPaymentAdvanceLoading: false,
        worksheetContractAdvancesTotalCount: 1,
    };

    it('renders a ContractAdmin', async () => {
        const { container } = render(props);

        expect(screen.getByText('For Contract Admin')).toBeDefined();
        expect(screen.getByText('Add Salesforce ID')).toBeDefined();
        expect(screen.getByText('Added:')).toBeDefined();
        expect(screen.getByText('2024-04-05')).toBeDefined();
        expect(screen.getByText('By:')).toBeDefined();
        expect(screen.getByText('Identity Name')).toBeDefined();

        expect(
            screen.getByText(ADD_SALESFORCE_ID_INFO_ALERT_MSG)
        ).toBeDefined();

        const input = container.querySelector(`input[name="salesforceId"]`);
        expect(input).toHaveDisplayValue('salesforceId-123');
        expect(input).not.toBeDisabled();

        if (input) {
            fireEvent.change(input, { target: { value: '' } });
        }
        expect(props.changeHandler).toHaveBeenCalled();
    });

    it('disables Salesforce ID input if FF is disabled', async () => {
        render({
            ...props,
            isFeatureAbacusCreateAndApprovePaymentsEnabled: false,
        });

        const input = screen.getByTestId('salesforceId');
        expect(input).toBeDisabled();
    });

    it('shows "Salesforce ID has been used already" Alert', async () => {
        render({ ...props, worksheetContractAdvancesTotalCount: 2 });

        expect(screen.getByText(SALESFORCE_USED)).toBeDefined();
    });
});
