import React from 'react';
import { screen } from '@testing-library/react';
import { renderInAppContext } from '@theorchard/suite-testing';
import {
    AbacusContractAdvanceStatus,
    AbacusContractAdvanceMilestone,
} from 'src/apollo/definitions/globalTypes';
import { AccountContractInformation } from 'src/components/advance-form/account-contract-information';
import { CONTRACT_TYPES } from 'src/constants';
import type { AccountContractInformationPropsTypes } from 'src/components/advance-form/account-contract-information';

describe('<AccountContractInformation>', () => {
    const contractMock = {
        abacusContract: {
            contractId: 'contractId123',
            contractType: CONTRACT_TYPES.DISTRIBUTION,
            contractName: 'test contract',
            account: {
                accountId: 'accountId1234',
                accountName: 'test account name',
                accountPaymentTerm: {
                    accountPaymentTermId: '453456',
                    currencyCode: 'AUD',
                    paymentEntity: {
                        paymentEntityName: 'AWAL-UK',
                        referencePaymentEntityId: '2',
                    },
                },
                accountPayee: {
                    accountPayeeId: 'payeeId12345',
                    payoneerPayeeId: null,
                    payoneerPayeeName: 'Test Payee name',
                },
            },
        },
    };

    const contractAdvanceMock: {
        abacusContractAdvance: NonNullable<
            AccountContractInformationPropsTypes['advanceData']
        >['abacusContractAdvance'];
    } = {
        abacusContractAdvance: {
            advanceDescription: 'Description',
            advanceStatus: AbacusContractAdvanceStatus.not_qualified,
            amount: 5,
            amountAfterWithholdingAndVat: 3,
            createdAt: '2020-01-01',
            contractAdvanceId: 'adbanceId3',
            contractId: '123',
            currencyCode: 'USD',
            milestone: AbacusContractAdvanceMilestone.contract_execution,
            milestoneDate: null,
            milestoneDescription: 'milestone description',
            note: null,
            usSourceIncomeRate: 100,
            referencePaymentType: null,
            vatAmount: 6,
            withholdingTaxAmount: 7,
        },
    };

    const render = () =>
        renderInAppContext(
            <AccountContractInformation
                contractData={contractMock}
                advanceData={contractAdvanceMock}
            />
        );

    it('renders', () => {
        render();
        expect(
            screen.getByText(
                'These fields are a reference for the payment approval process in Salesforce'
            )
        ).toBeDefined();
        expect(screen.getByText('adbanceId3')).toBeDefined();
        expect(screen.getByText('contractId123')).toBeDefined();
        expect(screen.getByText('accountId1234')).toBeDefined();
        expect(screen.getByText('payeeId12345')).toBeDefined();
        expect(screen.getByText('test account name')).toBeDefined();
        expect(screen.getByText('test contract')).toBeDefined();
        expect(screen.getByText('Test Payee name')).toBeDefined();
    });
});
