import React, { useState, useCallback } from 'react'; export interface ConfirmModalInfo { isOpen: boolean; title: string; message: string | React.ReactNode; onConfirmAction: () => void; isDestructive?: boolean; confirmText?: string; cancelText?: string; } const initialConfirmModalState: ConfirmModalInfo = { isOpen: false, title: '', message: '', onConfirmAction: () => {}, isDestructive: false, confirmText: 'Confirm', cancelText: 'Cancel', }; export interface ConfirmModalHook { confirmModalInfo: ConfirmModalInfo; requestConfirmation: ( title: string, message: string | React.ReactNode, onConfirm: () => void, options?: { isDestructive?: boolean; confirmText?: string; cancelText?: string; } ) => void; closeConfirmModal: () => void; } export const useConfirmModal = (): ConfirmModalHook => { const [confirmModalInfo, setConfirmModalInfo] = useState(initialConfirmModalState); const requestConfirmation = useCallback( ( title: string, message: string | React.ReactNode, onConfirm: () => void, options: { isDestructive?: boolean; confirmText?: string; cancelText?: string; } = {} ) => { setConfirmModalInfo({ isOpen: true, title, message, onConfirmAction: () => { onConfirm(); setConfirmModalInfo(prev => ({ ...prev, isOpen: false })); // Close modal after action }, isDestructive: options.isDestructive ?? false, confirmText: options.confirmText ?? 'Confirm', cancelText: options.cancelText ?? 'Cancel', }); }, [] ); const closeConfirmModal = useCallback(() => { setConfirmModalInfo(prev => ({ ...prev, isOpen: false })); }, []); return { confirmModalInfo, requestConfirmation, closeConfirmModal }; };