/**
 * =========================================================================
 * PLATEFORME ECO-PANNEAU.FR - VERSION 1.0.0
 * Paramètres du compte client - Sous-onglet : Données et RGPD
 * =========================================================================
 */

const FallbackNull = () => null;

const FallbackButton = ({ children, onClick, className, disabled, title, type = "button" }) => (
    <button type={type} onClick={onClick} className={className} disabled={disabled} title={title}>
        {children}
    </button>
);

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

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

    const { DownloadIcon, Trash2Icon, EyeIcon, FileTextIcon, ArchiveIcon } = window.pano_getIcons?.() || {};

    const Button = window.pano_Button || FallbackButton;
    const ConfirmModal = window.pano_ConfirmModal || FallbackNull;
    const PasswordPromptModal = window.pano_PasswordPromptModal || FallbackNull;
    const Modal = window.pano_Modal || FallbackNull;

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

    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 () => {
                closeCurrentLayer();
                const d = await window.pano_apiFetch('archives/delete', {
                    body: { filename: arc.filename },
                    setLoading: setIsSaving,
                    successMessage: "Archive supprimée avec succès."
                });
                if (d && refreshData) refreshData();
            }
        });
        openLocalDialog('confirm_privacy');
    };

    return (
        <div className="space-y-8 max-w-4xl animate-in fade-in">
            <div className="bg-white border border-slate-200 rounded-2xl p-6 shadow-sm space-y-4">
                <h3 className="font-black text-slate-800 text-lg flex items-center gap-2 border-b border-slate-100 pb-3">
                    {DownloadIcon && <DownloadIcon size={20} className="text-emerald-600"/>} Portabilité des données (RGPD)
                </h3>
                <p className="text-sm text-slate-600 leading-relaxed">
                    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-100 pt-4">
                        <h4 className="font-bold text-slate-700 text-sm">Vos archives générées</h4>
                        <div className="grid grid-cols-1 gap-3">
                            {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">
                                    <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">
                                            <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="p-2.5 shadow-none bg-white hover:bg-red-50" />
                                        <Button variant="secondary" shape="square" icon={EyeIcon} onClick={() => { setArcToReveal(arc.filename); openLocalDialog('pwd_arc'); }} title="Afficher le mot de passe" className="p-2.5 shadow-none bg-white" />
                                        <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">
                                            {DownloadIcon && <DownloadIcon size={16} className="shrink-0"/>} Télécharger
                                        </a>
                                    </div>
                                </div>
                            ))}
                        </div>
                    </div>
                )}
            </div>

            <div className="bg-red-50 border border-red-200 rounded-2xl p-6 shadow-sm space-y-4">
                <h3 className="font-black text-red-800 text-lg flex items-center gap-2">
                    {Trash2Icon && <Trash2Icon size={20}/>} Suppression du compte
                </h3>
                <p className="text-sm text-red-700 leading-relaxed font-medium">
                    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={() => openLocalDialog('delete_account')} className="px-6 py-3 uppercase tracking-widest text-xs">
                    Supprimer définitivement
                </Button>
            </div>

            {/* MODALES SPÉCIFIQUES À CE SOUS-ONGLET */}
            {activeDialog === 'confirm_privacy' && confirmConfig && ConfirmModal && (
                <ConfirmModal 
                    {...confirmConfig} 
                    onCancel={() => {
                        setConfirmConfig(null);
                        closeCurrentLayer();
                    }} 
                    zIndex="z-[350]" 
                />
            )}

            {activeDialog === 'delete_account' && PasswordPromptModal && (
                <PasswordPromptModal
                    title="Suppression irréversible"
                    desc="Pour confirmer la suppression définitive de votre compte, veuillez saisir votre mot de passe de connexion :"
                    onConfirm={async (password) => {
                        const d = await window.pano_apiFetch('clients/request_delete', {
                            body: { password },
                            setLoading: setIsSaving,
                            successMessage: "Demande confirmée. Un e-mail de validation finale vous a été envoyé."
                        });
                        if (d) closeCurrentLayer();
                    }}
                    onCancel={closeCurrentLayer}
                    isSaving={isSaving}
                    zIndex="z-[350]"
                />
            )}

            {activeDialog === 'pwd_arc' && arcToReveal && PasswordPromptModal && (
                <PasswordPromptModal
                    title="Déchiffrement de l'archive"
                    desc="Veuillez saisir votre mot de passe de compte pour afficher le mot de passe unique de cette archive :"
                    onConfirm={async (pwd) => {
                        const d = await window.pano_apiFetch('archives/reveal_password', {
                            body: { filename: arcToReveal, password: pwd },
                            setLoading: setIsSaving
                        });
                        if (d) {
                            closeCurrentLayer();
                            setTimeout(() => {
                                setRevealedPwdData(d.data.password);
                                openLocalDialog('show_pwd');
                            }, 150); 
                        }
                    }}
                    onCancel={closeCurrentLayer}
                    isSaving={isSaving}
                    zIndex="z-[350]"
                />
            )}

            {activeDialog === 'show_pwd' && revealedPwdData && Modal && (
                <Modal title="Mot de passe de l'archive" type="success" onClose={closeCurrentLayer} zIndex="z-[300]">
                    <div className="text-center p-6 space-y-6">
                        <p className="text-sm text-slate-600">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">
                            {revealedPwdData}
                        </div>
                        <Button variant="primary" onClick={() => { navigator.clipboard.writeText(revealedPwdData); showToast("Copié !", "success"); }} className="w-full py-3 justify-center">
                            Copier le mot de passe
                        </Button>
                    </div>
                </Modal>
            )}
        </div>
    );
};

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