import { DocumentRenderer } from '@/components/document-editor/document-renderer';
import { SignaturePadField } from '@/components/document-editor/signature-pad-field';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Head, router, usePage } from '@inertiajs/react';
import { CheckCircle2, Loader2 } from 'lucide-react';
import * as React from 'react';
import { toast } from 'sonner';

interface PublicDocument {
    uuid: string;
    token: string;
    title: string;
    category: string | null;
    mode: 'html' | 'pdf';
    source_pdf_url: string | null;
    body_html: string | null;
    recipient_name: string;
    status: string;
    sent_at: string | null;
    viewed_at: string | null;
    signed_at: string | null;
    sender_signature_url: string | null;
    sender_stamp_url: string | null;
    recipient_signature_url: string | null;
    recipient_stamp_url: string | null;
    final_pdf_url: string | null;
    expires_at: string | null;
}

interface PageProps {
    document: PublicDocument;
    flash?: { type?: string; message?: string };
}

export default function PublicDocumentSign() {
    const { document, flash } = usePage<PageProps>().props;
    const [signature, setSignature] = React.useState<string | null>(null);
    const [submitting, setSubmitting] = React.useState(false);

    React.useEffect(() => {
        if (flash?.type === 'success' && flash.message) toast.success(flash.message);
        if (flash?.type === 'error' && flash.message) toast.error(flash.message);
    }, [flash]);

    const alreadySigned = document.status === 'signed';

    const submit = () => {
        if (!signature) {
            toast.error("Veuillez dessiner votre signature avant d'envoyer.");
            return;
        }
        setSubmitting(true);
        router.post(
            `/documents/sign/${document.token}`,
            { signature, stamp: null },
            {
                onFinish: () => setSubmitting(false),
            },
        );
    };

    return (
        <>
            <Head title={`Signature — ${document.title}`} />
            <div className="min-h-screen bg-slate-100 py-6">
                <div className="mx-auto max-w-4xl space-y-4 px-3">
                    <header className="flex flex-col gap-1 rounded-md bg-white p-4 shadow-sm">
                        <p className="text-xs uppercase tracking-wide text-muted-foreground">Document à signer</p>
                        <h1 className="text-xl font-semibold">{document.title}</h1>
                        <p className="text-sm text-muted-foreground">
                            Bonjour <strong>{document.recipient_name}</strong>, merci de relire le document ci-dessous puis de le
                            signer en bas de page.
                        </p>
                    </header>

                    {alreadySigned && (
                        <div className="flex items-center gap-3 rounded-md border border-emerald-200 bg-emerald-50 p-4 text-emerald-800">
                            <CheckCircle2 className="h-5 w-5" />
                            <div>
                                <p className="font-medium">Document signé.</p>
                                {document.signed_at && (
                                    <p className="text-xs">Le {new Date(document.signed_at).toLocaleString('fr-FR')}</p>
                                )}
                            </div>
                        </div>
                    )}

                    {/* Document body — read-only renderer, no inline pad (we sign below). */}
                    <Card className="overflow-hidden">
                        <CardContent className="p-0">
                            {document.mode === 'pdf' && document.source_pdf_url ? (
                                <iframe
                                    src={`${document.source_pdf_url}#toolbar=1&navpanes=0`}
                                    title={document.title}
                                    className="h-[80vh] w-full bg-white"
                                />
                            ) : (
                                <DocumentRenderer
                                    html={document.body_html ?? ''}
                                    senderSignatureUrl={document.sender_signature_url}
                                    senderStampUrl={document.sender_stamp_url}
                                    recipientSignatureUrl={document.recipient_signature_url}
                                    recipientStampUrl={document.recipient_stamp_url}
                                    recipientSignedAt={document.signed_at}
                                    locked={true}
                                />
                            )}
                        </CardContent>
                    </Card>

                    {/* Signature section — mirrors the reservation contract pattern. */}
                    {!alreadySigned && (
                        <Card className="border-emerald-200">
                            <CardHeader>
                                <CardTitle>Signez ici pour valider le document</CardTitle>
                            </CardHeader>
                            <CardContent className="space-y-4">
                                <div className="grid grid-cols-1 gap-6 md:grid-cols-2">
                                    <div className="text-center">
                                        <p className="mb-2 text-base font-semibold text-black">
                                            Signature et cachet du mandataire
                                        </p>
                                        <img
                                            src={document.sender_stamp_url || '/admin-sign/sign-admin.png'}
                                            alt="Signature Conciergerie"
                                            className="mx-auto h-48 w-64 object-contain"
                                        />
                                    </div>
                                    <div>
                                        <p className="mb-2 text-center text-base font-semibold text-black">
                                            Signature du Partenaire
                                        </p>
                                        <SignaturePadField
                                            label=""
                                            description="Dessinez votre signature avec la souris ou le doigt."
                                            value={signature}
                                            onChange={setSignature}
                                        />
                                    </div>
                                </div>
                                <div className="flex justify-end pt-2">
                                    <Button onClick={submit} disabled={submitting || !signature} size="lg">
                                        {submitting ? (
                                            <>
                                                <Loader2 className="mr-2 h-4 w-4 animate-spin" />
                                                Envoi…
                                            </>
                                        ) : (
                                            'Signer et envoyer'
                                        )}
                                    </Button>
                                </div>
                            </CardContent>
                        </Card>
                    )}
                </div>
            </div>
        </>
    );
}
