import { useToast } from '@theorchard/suite-components';
import { useCreateContractFlowthrough } from 'src/apollo/mutations/contract-flowthrough';
import type { AbacusContractFlowthroughInput } from 'src/apollo/definitions/globalTypes';

export const useSaveHandler = (contractId: string) => {
    const createContractFlowthrough = useCreateContractFlowthrough(contractId);
    const toast = useToast();

    const saveHandler = async (
        contractFlowthrough: Partial<AbacusContractFlowthroughInput>
    ) => {
        const variables = {
            contractFlowthrough: {
                flowthroughRate:
                    (contractFlowthrough.flowthroughRate as number) || 0,
                contractId: contractId! as string,
                hasAutomaticShutoff:
                    contractFlowthrough.hasAutomaticShutoff! as boolean,
                recoupmentCap:
                    (contractFlowthrough.recoupmentCap as number) || null,
                calculationComment:
                    contractFlowthrough.calculationComment?.trim() || null,
                referenceFlowthroughCalculationId:
                    contractFlowthrough.referenceFlowthroughCalculationId! as string,
            },
        };
        const newContractFlowthrough = await createContractFlowthrough({
            variables,
        });
        const contractFlowthroughId =
            newContractFlowthrough?.data?.abacusCreateContractFlowthrough
                ?.contractFlowthroughId;
        if (contractFlowthroughId) {
            toast(`Flowthrough information has been successfully added.`);
        }
        return contractFlowthroughId;
    };
    return saveHandler;
};
