import { render, screen } from '@testing-library/react';
import { ABACUS_ACTION_STATUSES } from '@theorchard/accounting-apps-shared';
import { determinePayeeStatus } from '../payee-management';

describe('determinePayeeStatus', () => {
    const renderStatus = (actionStatus: string, message = 'msg') =>
        render(
            determinePayeeStatus({
                abacusStateId: 's',
                actionStatus,
                message,
            } as any)
        );

    it('INIT -> Details not submitted', () => {
        renderStatus(ABACUS_ACTION_STATUSES.INIT);
        expect(screen.getByText('Details not submitted')).toBeInTheDocument();
    });

    it('RUNNING -> uses message', () => {
        renderStatus(ABACUS_ACTION_STATUSES.RUNNING, 'Pending KYC');
        expect(screen.getAllByText('Pending KYC').length).toBeGreaterThan(0);
    });

    it('COMPLETE -> Eligible for payment', () => {
        renderStatus(ABACUS_ACTION_STATUSES.COMPLETE);
        expect(screen.getByText('Eligible for payment')).toBeInTheDocument();
    });

    it('REJECTED -> Rejected', () => {
        renderStatus(ABACUS_ACTION_STATUSES.REJECTED, 'Reason');
        expect(screen.getByText('Rejected')).toBeInTheDocument();
    });

    it('when kycNotification has fileUploadLink, status text is blank', () => {
        render(
            determinePayeeStatus(
                {
                    abacusStateId: 's',
                    actionStatus: ABACUS_ACTION_STATUSES.RUNNING,
                    message: 'Pending KYC',
                } as any,
                { fileUploadLink: 'https://example.test/file' }
            )
        );
        // The component sets `text` to '' in this case, but still renders the child bankingState.message.
        expect(screen.getAllByText('Pending KYC').length).toBeGreaterThan(0);
    });
});
