import React, { useEffect, useState } from 'react';
import { __ } from '@wordpress/i18n';
import { useNavigate } from 'react-router-dom';
import { Dialog } from 'primereact/dialog';
import { Button } from 'primereact/button';
import { Message } from 'primereact/message';
import Ar1Service from '../service/ar1Service';
import Ar1StatusTag from './Ar1StatusTag';
import { useStoreValue } from '../../../store';

const DISMISS_SESSION_KEY_PREFIX = 'ar1-compliance-dismissed-';
const DISMISS_WINDOW_HOURS = 24;

// AR1 (D.Lgs.231/2007) si applica solo alle aziende beneficiarie.
// Admin / istruttore / direttore NON devono ricevere il popup.
const AR1_POPUP_ALLOWED_ROLES = ['ROLE_BENEFICIARY', 'ROLE_CONFIDI'];

/**
 * Dialog AR1 mostrato al login se l'azienda ha AR1 MISSING/EXPIRED/APPROACHING.
 * - dismissable=false (EXPIRED/MISSING): bloccante, solo CTA "Compila ora"
 * - dismissable=true (APPROACHING): X chiude + salva in sessionStorage 24h
 *
 * Da montare nel layout principale. Esempio:
 *   <Ar1ComplianceModal companyId={userCompanyId} />
 */
const Ar1ComplianceModal = ({ companyId }) => {
    const navigate = useNavigate();
    const role = useStoreValue('getRole');
    const [status, setStatus] = useState(null);
    const [visible, setVisible] = useState(false);
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        // Gate ruolo: solo aziende vedono il popup AR1.
        if (!AR1_POPUP_ALLOWED_ROLES.includes(role)) {
            setLoading(false);
            return;
        }
        if (!companyId) return;
        const dismissKey = DISMISS_SESSION_KEY_PREFIX + companyId;
        const dismissed = sessionStorage.getItem(dismissKey);
        if (dismissed) {
            const dismissedAt = parseInt(dismissed, 10);
            if (Date.now() - dismissedAt < DISMISS_WINDOW_HOURS * 3600 * 1000) {
                setLoading(false);
                return;
            }
        }

        Ar1Service.getStatusForCompany(companyId,
            (resp) => {
                setLoading(false);
                const showFor = ['MISSING', 'EXPIRED', 'APPROACHING'];
                if (resp && showFor.includes(resp.status)) {
                    setStatus(resp);
                    setVisible(true);
                }
            },
            (err) => {
                setLoading(false);
                console.warn('Ar1ComplianceModal: status check failed', err);
            }
        );
    }, [companyId, role]);

    const handleDismiss = () => {
        if (!status?.is_popup_dismissible) return;
        sessionStorage.setItem(DISMISS_SESSION_KEY_PREFIX + companyId, Date.now().toString());
        setVisible(false);
    };

    const goToCompile = () => {
        setVisible(false);
        navigate('/ar1');
    };

    if (loading || !status) return null;

    const canDismiss = status.is_popup_dismissible;
    const isUrgent = status.status === 'EXPIRED' || status.status === 'MISSING';

    return (
        <Dialog
            header={<div><i className="pi pi-id-card" style={{ marginRight: 8 }} />{__('Dichiarazione AR1 — Adeguata Verifica', 'gepafin')}</div>}
            visible={visible}
            modal
            closable={canDismiss}
            closeOnEscape={canDismiss}
            dismissableMask={canDismiss}
            onHide={handleDismiss}
            style={{ width: '560px', maxWidth: '95vw' }}
        >
            <div>
                <div style={{ marginBottom: 12 }}>
                    <Ar1StatusTag status={status.status} />
                </div>

                {isUrgent && (
                    <Message
                        severity="error"
                        text={status.must_recompile_reason ||
                            __('Per proseguire nell\'operativita con Gepafin e necessario aggiornare la dichiarazione di adeguata verifica (D.Lgs. 231/2007).', 'gepafin')}
                        style={{ marginBottom: 12 }}
                    />
                )}

                {!isUrgent && (
                    <Message
                        severity="warn"
                        text={__('La tua dichiarazione AR1 sta per scadere. Ti chiediamo di aggiornarla per tempo.', 'gepafin')}
                        style={{ marginBottom: 12 }}
                    />
                )}

                <p style={{ margin: '10px 0', color: '#444' }}>
                    {__('Il modulo AR1 (Aggiornamento Adeguata Verifica) e richiesto dalla normativa antiriciclaggio D.Lgs. 231/2007. La compilazione si svolge via wizard guidato e termina con la firma digitale (FEQ) del modulo.', 'gepafin')}
                </p>

                {status.days_to_expiry !== null && status.days_to_expiry !== undefined && (
                    <p style={{ margin: '10px 0', fontWeight: 600 }}>
                        {status.days_to_expiry < 0
                            ? __(`Scaduta da ${Math.abs(status.days_to_expiry)} giorni`, 'gepafin')
                            : __(`Scadenza tra ${status.days_to_expiry} giorni`, 'gepafin')}
                    </p>
                )}

                <div style={{ display: 'flex', gap: 8, justifyContent: 'flex-end', marginTop: 16 }}>
                    {canDismiss && (
                        <Button
                            label={__('Ricordamelo piu tardi', 'gepafin')}
                            severity="secondary"
                            outlined
                            onClick={handleDismiss}
                        />
                    )}
                    <Button
                        label={status.status === 'DRAFT' ? __('Riprendi compilazione', 'gepafin') : __('Compila ora', 'gepafin')}
                        icon="pi pi-arrow-right"
                        iconPos="right"
                        onClick={goToCompile}
                    />
                </div>
            </div>
        </Dialog>
    );
};

export default Ar1ComplianceModal;
