// ECO-PANNEAU.FR - _react/clients/_clients_settings_privacy.jsx

window.pano_ClientSettingsPrivacy = ({ myClientData, data, showToast, refreshData, setArchiveConfig, openLocalDialog, closeCurrentLayer, activeDialog, onClose }) => {
    const { useState } = React;

    // ZÉRO-DETTE : Utilisation de notre Hook abstrait !
    const { isMounted, safeFetch } = window.pano_useSafeFetch();

    const [isSaving, setIsSaving] = useState(false);
    const [confirmConfig, setConfirmConfig] = useState(null);
    const [arcToReveal, setArcToReveal] = useState(null);
    const [revealedPwdData, setRevealedPwdData] = useState(null);

    // 1. - Composants et Icônes
    const { DownloadIcon, Trash2Icon, EyeIcon, FileTextIcon, ArchiveIcon, ShieldAlertIcon, MailIcon, LoaderIcon } = window.pano_getIcons();
    const { Button, ConfirmModal, PasswordPromptModal, Modal } = window.pano_getComponents();

    const rgpdArchives = (data.archives || []).filter(a => a.type === 'RGPD');

    // 2. - Actions métier
    const handleDeleteArchive = (arc) => {
        setConfirmConfig({
            title: "Supprimer l'archive RGPD",
            message: "Êtes-vous sûr de vouloir supprimer définitivement cette archive ? Cette action est irréversible.",
            confirmText: "Oui, supprimer",
            isDestructive: true,
            onConfirm: async () => {
                // ZÉRO-DETTE : Dépilement de la confirmation via l'historique natif
                closeCurrentLayer(); 
                const d = await safeFetch('archives/delete', {
                    body: { filename: arc.filename },
                    setLoading: setIsSaving,
                    successMessage: "Archive supprimée avec succès."
                });
                
                if (!isMounted.current) return; // SÉCURITÉ : Coupe-circuit
                
                if (d && refreshData) refreshData();
            }
        });
        openLocalDialog('confirm_privacy');
    };

    // ZÉRO-TRUST : Tentative d'accès via le Sudo-Mode (Session de 60min)
    const handleRevealPassword = async (filename) => {
        setArcToReveal(filename); 
        const d = await safeFetch('archives/reveal_password', {
            body: { filename },
            setLoading: setIsSaving
        });
        
        if (!isMounted.current) return; // SÉCURITÉ : Coupe-circuit
        
        if (d && d.data?.password) {
            // Le serveur a validé la session de confiance
            setRevealedPwdData(d.data.password);
            openLocalDialog('show_pwd');
        } else {
            // Le serveur a refusé (session d'une heure expirée ou invalide)
            // On retombe en sécurité maximale : on exige le mot de passe.
            openLocalDialog('pwd_arc');
        }
    };

    // 3. - Rendu UI
    return (
        <Modal 
            title="Données et RGPD" 
            type="default" 
            onClose={onClose} 
            maxWidth="max-w-3xl"
            actions={(close) => (
                <Button variant="secondary" onClick={close} className="w-full py-3 justify-center text-xs">
                    Fermer
                </Button>
            )}
        >
            <div className="space-y-6 min-w-0 w-full">
                
                {/* BLOC 1 : PORTABILITÉ DES DONNÉES */}
                <div className="bg-slate-50 p-5 rounded-2xl border border-slate-200 shadow-sm min-w-0 w-full">
                    <h3 className="font-black text-slate-800 text-base flex flex-wrap items-center gap-2 border-b border-slate-200 pb-3 mb-4 break-words">
                        {DownloadIcon && <DownloadIcon size={20} className="text-emerald-600 shrink-0"/>} Portabilité des données (RGPD)
                    </h3>
                    <div className="space-y-4 min-w-0 w-full">
                        <p className="text-sm text-slate-600 leading-relaxed break-words">
                            Conformément au RGPD, vous pouvez télécharger une archive `.zip` contenant l'intégralité de vos données personnelles, 
                            vos factures, ainsi que les informations de vos panneaux. Les documents stockés dans le coffre-fort légal y sont inclus.
                        </p>
                        <Button variant="primary" icon={FileTextIcon} onClick={() => { setArchiveConfig({ type: 'rgpd' }); openLocalDialog('archive_config'); }} className="py-3 px-6">
                            Générer mon archive RGPD
                        </Button>

                        {rgpdArchives.length > 0 && (
                            <div className="mt-6 space-y-3 border-t border-slate-200 pt-6 min-w-0 w-full">
                                <h4 className="font-bold text-slate-700 text-sm break-words">Vos archives générées</h4>
                                <div className="grid grid-cols-1 gap-3 min-w-0 w-full">
                                    {rgpdArchives.map((arc, i) => (
                                        <div key={i} className="bg-white border border-slate-200 rounded-xl p-4 flex flex-col md:flex-row justify-between items-start md:items-center gap-4 shadow-sm transition hover:shadow-md min-w-0 w-full">
                                            <div className="flex items-center gap-3 min-w-0 w-full md:w-auto">
                                                <div className="w-10 h-10 bg-slate-100 text-slate-500 rounded-lg flex items-center justify-center shrink-0">
                                                    {ArchiveIcon && <ArchiveIcon size={20} />}
                                                </div>
                                                <div className="min-w-0 flex-1">
                                                    <p className="text-sm font-bold text-slate-800 break-words leading-tight" title="Archive de vos données (RGPD)">Archive de vos données (RGPD)</p>
                                                    <p className="text-xs text-slate-500 break-words leading-tight mt-0.5">
                                                        Disponible jusqu'au {new Date(arc.expires_at * 1000).toLocaleString('fr-FR', {dateStyle: 'short', timeStyle: 'short'})}
                                                    </p>
                                                </div>
                                            </div>
                                            <div className="flex flex-wrap gap-2 w-full md:w-auto shrink-0 justify-end">
                                                <Button variant="danger" shape="round" icon={Trash2Icon} onClick={() => handleDeleteArchive(arc)} title="Supprimer l'archive" className="shadow-none bg-slate-50 hover:bg-red-50 border-none" />
                                                <Button variant="secondary" shape="square" icon={EyeIcon} onClick={() => handleRevealPassword(arc.filename)} title="Afficher le mot de passe" className="shadow-none bg-slate-50 border-none hover:bg-slate-200" />
                                                <a 
                                                    href={`${window.pano_CONFIG.apiBaseUrl}archives/download&file=${arc.filename.replace('.zip', '')}`} 
                                                    download={`eco-panneau.fr_${arc.filename}`} 
                                                    className="flex-1 md:flex-none flex items-center justify-center px-4 py-2.5 bg-emerald-100 text-emerald-700 hover:bg-emerald-200 hover:text-emerald-800 font-bold text-xs rounded-xl transition gap-2 whitespace-nowrap shadow-sm"
                                                >
                                                    {DownloadIcon && <DownloadIcon size={16} className="shrink-0"/>} Télécharger
                                                </a>
                                            </div>
                                        </div>
                                    ))}
                                </div>
                            </div>
                        )}
                    </div>
                </div>

                {/* BLOC 2 : SUPPRESSION DU COMPTE */}
                <div className="bg-red-50 border border-red-200 rounded-2xl p-5 shadow-sm min-w-0 w-full">
                    <h3 className="font-black text-red-800 text-base flex flex-wrap items-center gap-2 border-b border-red-200 pb-3 mb-4 break-words">
                        {ShieldAlertIcon && <ShieldAlertIcon size={20} className="text-red-600 shrink-0"/>} Suppression du compte
                    </h3>
                    <div className="space-y-4 min-w-0 w-full">
                        <p className="text-sm text-red-700 leading-relaxed font-medium break-words">
                            La suppression de votre compte est irréversible. Toutes vos données personnelles, 
                            ainsi que vos panneaux en brouillon seront détruits de nos serveurs. 
                            Cependant, pour des raisons légales, les données liées à la facturation 
                            et aux panneaux publics passés ou actifs sont conservées le temps de leurs délais légaux respectifs.
                        </p>
                        <Button variant="dangerSolid" onClick={() => {
                            setConfirmConfig({
                                title: "Suppression irréversible",
                                message: "Pour confirmer la suppression définitive de votre compte, veuillez valider ci-dessous. Un e-mail de validation finale (avec un lien sécurisé) vous sera envoyé à votre adresse.",
                                confirmText: "Oui, envoyer l'e-mail de suppression",
                                isDestructive: true,
                                onConfirm: async () => {
                                    closeCurrentLayer(); // Dépilement propre
                                    const d = await safeFetch('clients/request_delete', {
                                        setLoading: setIsSaving,
                                        successMessage: "Demande confirmée. Un e-mail de validation finale vous a été envoyé."
                                    });
                                    if (!isMounted.current) return; // SÉCURITÉ : Coupe-circuit
                                }
                            });
                            openLocalDialog('confirm_privacy');
                        }} className="px-6 py-3 uppercase tracking-widest text-xs shadow-md">
                            Supprimer définitivement
                        </Button>
                    </div>
                </div>
            </div>

            {/* 4. - Modales contextuelles sécurisées sans boucle infinie */}
            {activeDialog === 'confirm_privacy' && confirmConfig && ConfirmModal && (
                <ConfirmModal 
                    {...confirmConfig} 
                    onCancel={() => {
                        setConfirmConfig(null);
                        closeCurrentLayer();
                    }} 
                />
            )}

            {activeDialog === 'pwd_arc' && arcToReveal && PasswordPromptModal && (
                <PasswordPromptModal
                    title="Déchiffrement de l'archive"
                    desc="Votre session de confiance a expiré. Veuillez saisir votre mot de passe pour afficher la clé de cette archive :"
                    onConfirm={async (pwd) => {
                        const d = await safeFetch('archives/reveal_password', {
                            body: { filename: arcToReveal, password: pwd },
                            setLoading: setIsSaving
                        });
                        if (!isMounted.current) return; // SÉCURITÉ : Coupe-circuit
                        
                        if (d) {
                            setRevealedPwdData(d.data.password);
                            openLocalDialog('show_pwd');
                        }
                    }}
                    onCancel={closeCurrentLayer}
                    isSaving={isSaving}
                />
            )}

            {activeDialog === 'show_pwd' && revealedPwdData && Modal && (
                <Modal 
                    title="Mot de passe de l'archive" 
                    type="success" 
                    onClose={closeCurrentLayer} 
                    actions={(close) => (
                        <>
                            <Button 
                                variant="outline" 
                                icon={isSaving ? LoaderIcon : MailIcon} 
                                onClick={async () => {
                                    const d = await safeFetch('archives/send_password', {
                                        body: { filename: arcToReveal },
                                        setLoading: setIsSaving,
                                        successMessage: "Mot de passe envoyé par e-mail."
                                    });
                                    if (!isMounted.current) return; // SÉCURITÉ
                                }} 
                                disabled={isSaving} 
                                className="flex-1 py-3 justify-center shadow-sm text-xs"
                            >
                                <span className="hidden sm:inline">Recevoir par e-mail</span>
                                <span className="sm:hidden">Par e-mail</span>
                            </Button>
                            <Button variant="primary" onClick={() => { navigator.clipboard.writeText(revealedPwdData); showToast("Copié !", "success"); }} className="flex-[2] py-3 uppercase tracking-widest justify-center shadow-md text-xs">
                                Copier le mot de passe
                            </Button>
                        </>
                    )}
                >
                    <div className="text-center p-6 space-y-6 pb-2">
                        <p className="text-sm text-slate-600 break-words">Voici le mot de passe unique permettant d'extraire cette archive :</p>
                        <div className="text-3xl font-mono font-black text-slate-800 select-all tracking-wider bg-slate-100 py-4 rounded-xl border border-slate-200 break-words">
                            {revealedPwdData}
                        </div>
                    </div>
                </Modal>
            )}
        </Modal>
    );
};

/* EOF ========== [_react/clients/_clients_settings_privacy.jsx] */