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

/**
 * Copie dans le presse-papiers et retient ~2 s la clé du dernier élément copié,
 * pour afficher « Copié » sur CE bouton-là. Rend `false` quand le navigateur
 * refuse (origine non sécurisée, permission, geste utilisateur expiré) : à
 * l'appelant de proposer un repli (toast avec le texte, lien affiché).
 */
export function useCopyToClipboard(resetMs = 2000) {
    const [copiedKey, setCopiedKey] = useState<string | null>(null);

    useEffect(() => {
        if (copiedKey === null) {
            return;
        }
        const timer = window.setTimeout(() => setCopiedKey(null), resetMs);
        return () => window.clearTimeout(timer);
    }, [copiedKey, resetMs]);

    const copy = useCallback(async (text: string, key = 'default'): Promise<boolean> => {
        try {
            await navigator.clipboard.writeText(text);
            setCopiedKey(key);
            return true;
        } catch {
            setCopiedKey(null);
            return false;
        }
    }, []);

    return { copiedKey, copy };
}
