import { useCallback, useEffect, useState } from 'react';

interface UseTwoFactorModalStateProps {
    isOpen: boolean;
    twoFactorEnabled: boolean;
    requiresConfirmation: boolean;
    qrCodeSvg: string | null;
    clearSetupData: () => void;
    fetchSetupData: () => Promise<void>;
    onClose: () => void;
}

export const useTwoFactorModalState = ({
    isOpen,
    twoFactorEnabled,
    requiresConfirmation,
    qrCodeSvg,
    clearSetupData,
    fetchSetupData,
    onClose,
}: UseTwoFactorModalStateProps) => {
    const [showVerificationStep, setShowVerificationStep] =
        useState<boolean>(false);

    const handleModalNextStep = useCallback(() => {
        if (requiresConfirmation) {
            setShowVerificationStep(true);
            return;
        }

        clearSetupData();
        onClose();
    }, [requiresConfirmation, clearSetupData, onClose]);

    const resetModalState = useCallback(() => {
        setShowVerificationStep(false);
        if (twoFactorEnabled) {
            clearSetupData();
        }
    }, [twoFactorEnabled, clearSetupData]);

    useEffect(() => {
        if (!isOpen) {
            resetModalState();
            return;
        }

        if (!qrCodeSvg) {
            fetchSetupData();
        }
    }, [isOpen, qrCodeSvg, fetchSetupData, resetModalState]);

    return {
        showVerificationStep,
        handleModalNextStep,
    };
};
