import { Head, Link } from '@inertiajs/react';
import LotoLayout from '@/Layouts/LotoLayout';
import { ArrowLeft, Trophy, Clock, Users, Download } from "lucide-react";
import { motion } from "framer-motion";
import jsPDF from "jspdf";
import autoTable from "jspdf-autotable";
import { DashboardHeader } from "@/Components/loto/DashboardHeader";
import { LotoBall } from "@/Components/loto/LotoBall";
import {
  getDrawById,
  getPreviousDraws,
  formatFCFA,
  type Draw,
} from "@/lib/loto-data";

export default function DrawDetailPage({ drawId, dbDraw, previousDraws = [] }: { drawId: string, dbDraw: any, previousDraws?: any[] }) {
  const draw = dbDraw;
  if (!draw) return (
    <div className="flex min-h-screen items-center justify-center bg-background px-4">
      <div className="max-w-md text-center">
        <h1 className="text-4xl font-bold text-foreground">Tirage introuvable</h1>
        <p className="mt-2 text-muted-foreground">Ce tirage n'existe pas ou a été supprimé.</p>
        <Link href="/" className="mt-6 inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90">
          Retour au tableau de bord
        </Link>
      </div>
    </div>
  );

  const handleExportPDF = () => {
    const doc = new jsPDF();
    const orange: [number, number, number] = [220, 110, 30];
    let y = 18;

    doc.setFontSize(18);
    doc.setTextColor(...orange);
    doc.text(`Tirage ${draw.name}`, 14, y);
    doc.setFontSize(10);
    doc.setTextColor(110, 110, 110);
    doc.text(`${draw.date}`, 14, y + 7);
    doc.text(`Jackpot : ${formatFCFA(draw.jackpot)}`, 14, y + 13);
    y += 24;

    doc.setFontSize(12);
    doc.setTextColor(30, 30, 30);
    doc.text("Numéros gagnants", 14, y);
    doc.setFontSize(11);
    doc.setTextColor(...orange);
    doc.text(draw.numbers.map((n: number) => String(n).padStart(2, "0")).join("   "), 14, y + 7);
    y += 16;

    doc.setFontSize(12);
    doc.setTextColor(30, 30, 30);
    doc.text("Numéros machine", 14, y);
    doc.setFontSize(11);
    doc.setTextColor(90, 90, 90);
    doc.text(draw.machine.map((n: number) => String(n).padStart(2, "0")).join("   "), 14, y + 7);
    y += 14;

    autoTable(doc, {
      startY: y,
      head: [["Rang", "Numéros trouvés", "Gain estimé", "Gagnants"]],
      body: draw.payouts.map((p: any) => [
        String(p.rank),
        `${p.matched} / 5`,
        formatFCFA(p.prize),
        String(p.winners),
      ]),
      headStyles: { fillColor: orange },
      styles: { fontSize: 9 },
    });

    if (previousDraws.length > 0) {
      autoTable(doc, {
        startY: (doc as unknown as { lastAutoTable: { finalY: number } }).lastAutoTable.finalY + 10,
        head: [["Mini-historique", "Date", "Numéros", "Jackpot"]],
        body: previousDraws.map((prev: any) => [
          `${prev.name}`,
          prev.date,
          prev.numbers.map((n: number) => String(n).padStart(2, "0")).join(" "),
          formatFCFA(prev.jackpot),
        ]),
        headStyles: { fillColor: orange },
        styles: { fontSize: 9 },
      });
    }

    doc.save(`tirage-${draw.id}.pdf`);
  };


  return (
    <div className="min-h-screen bg-background">
      <Head>
        <title>Tirage {draw.name} — Loto 5/90 Côte d'Ivoire</title>
        <meta name="description" content={`Résultats du tirage ${draw.name} du ${draw.date}. Numéros gagnants et gains.`} />
      </Head>
      <DashboardHeader />

      <main className="mx-auto max-w-4xl px-4 py-8 sm:px-6">
        <div className="flex items-center justify-between gap-3">
          <Link
            href="/"
            className="inline-flex items-center gap-2 rounded-lg border border-border bg-card px-3 py-2 text-sm font-medium text-foreground transition-colors hover:bg-muted"
          >
            <ArrowLeft className="h-4 w-4" />
            Retour au tableau de bord
          </Link>

          <button
            onClick={handleExportPDF}
            className="inline-flex items-center gap-2 rounded-lg gradient-orange px-4 py-2 text-sm font-semibold text-primary-foreground shadow-[var(--shadow-glow)] transition-opacity hover:opacity-90"
          >
            <Download className="h-4 w-4" />
            Exporter en PDF
          </button>
        </div>


        <motion.div
          initial={{ opacity: 0, y: 20 }}
          animate={{ opacity: 1, y: 0 }}
          transition={{ duration: 0.5 }}
          className="mt-6"
        >
          {/* Header */}
          <div className="rounded-2xl border border-border bg-card p-6 shadow-[var(--shadow-card)]">
            <div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
              <div>
                <div className="flex items-center gap-3">
                  <h1 className="font-display text-2xl font-bold">Tirage {draw.name}</h1>
                </div>
                <p className="mt-1 flex items-center gap-1.5 text-sm text-muted-foreground">
                  <Clock className="h-3.5 w-3.5" />
                  {draw.date}
                </p>
              </div>
              <div className="flex items-center gap-2 rounded-xl gradient-orange px-4 py-2 text-primary-foreground shadow-[var(--shadow-glow)]">
                <Trophy className="h-5 w-5" />
                <span className="font-display text-lg font-bold">{formatFCFA(draw.jackpot)}</span>
              </div>
            </div>
          </div>

          {/* Winning numbers */}
          <div className="mt-6 rounded-2xl border border-border bg-card p-6 shadow-[var(--shadow-card)]">
            <h2 className="font-display text-lg font-bold">Numéros gagnants</h2>
            <div className="mt-4 flex flex-wrap gap-3">
              {(draw.numbers || []).map((n: number, i: number) => (
                <LotoBall key={n} value={n} variant="draw" size="lg" index={i} />
              ))}
            </div>
          </div>

          {/* Machine numbers */}
          <div className="mt-6 rounded-2xl border border-border bg-card p-6 shadow-[var(--shadow-card)]">
            <h2 className="font-display text-lg font-bold">Numéros machine</h2>
            <div className="mt-4 flex flex-wrap gap-3">
              {(draw.machine || []).map((n: number, i: number) => (
                <LotoBall key={n} value={n} variant="machine" size="lg" index={i} />
              ))}
            </div>
          </div>

          {/* Estimated gains */}
          <div className="mt-6 rounded-2xl border border-border bg-card p-6 shadow-[var(--shadow-card)]">
            <h2 className="font-display text-lg font-bold">Gains estimés</h2>
            <p className="text-sm text-muted-foreground">
              Répartition des gains par rang pour ce tirage
            </p>

            <div className="mt-4 overflow-x-auto">
              <table className="w-full border-collapse text-sm">
                <thead>
                  <tr className="text-left text-xs uppercase tracking-wider text-muted-foreground">
                    <th className="pb-3 font-medium">Rang</th>
                    <th className="pb-3 font-medium">Numéros trouvés</th>
                    <th className="pb-3 text-right font-medium">Gain estimé</th>
                    <th className="pb-3 text-right font-medium">Gagnants</th>
                  </tr>
                </thead>
                <tbody>
                  {(draw.payouts || []).map((p: any) => (
                    <tr key={p.rank} className="border-t border-border/60">
                      <td className="py-3">
                        <span
                          className={`inline-flex h-7 w-7 items-center justify-center rounded-full text-xs font-bold ${
                            p.rank === 1
                              ? "gradient-orange text-primary-foreground"
                              : "bg-muted text-muted-foreground"
                          }`}
                        >
                          {p.rank}
                        </span>
                      </td>
                      <td className="py-3 font-medium">{p.matched} / 5</td>
                      <td className="py-3 text-right font-bold tabular-nums text-secondary">
                        {formatFCFA(p.prize)}
                      </td>
                      <td className="py-3 text-right text-muted-foreground tabular-nums">
                        {p.winners}
                      </td>
                    </tr>
                  ))}
                </tbody>
              </table>
            </div>

            <div className="mt-4 flex items-center justify-between rounded-xl bg-muted/50 px-4 py-3">
              <span className="flex items-center gap-2 text-sm font-medium text-foreground">
                <Users className="h-4 w-4 text-muted-foreground" />
                Total gagnants
              </span>
              <span className="font-display font-bold tabular-nums text-foreground">
                {draw.winners}
              </span>
            </div>
          </div>

          {/* Mini-history */}
          {previousDraws.length > 0 && (
            <div className="mt-6 rounded-2xl border border-border bg-card p-6 shadow-[var(--shadow-card)]">
              <h2 className="font-display text-lg font-bold">Mini-historique</h2>
              <p className="text-sm text-muted-foreground">
                Tirages précédents
              </p>

              <div className="mt-4 space-y-3">
                {previousDraws.map((prev: any) => (
                  <Link
                    key={prev.id}
                    href={`/tirages/${prev.id}`}
                    className="flex items-center justify-between rounded-xl border border-border bg-background p-4 transition-colors hover:bg-muted/50"
                  >
                    <div>
                      <span className="font-display font-semibold">{prev.name}</span>
                      <p className="text-xs text-muted-foreground">{prev.date}</p>
                    </div>
                    <div className="flex items-center gap-3">
                      <div className="flex gap-1">
                        {(prev.numbers || []).slice(0, 3).map((n: number) => (
                          <span
                            key={n}
                            className="flex h-7 w-7 items-center justify-center rounded-full bg-primary/10 text-xs font-bold text-primary"
                          >
                            {String(n).padStart(2, "0")}
                          </span>
                        ))}
                        <span className="flex h-7 w-7 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground">
                          +{Math.max(0, (prev.numbers || []).length - 3)}
                        </span>
                      </div>
                      <span className="text-right text-sm font-medium tabular-nums">
                        {formatFCFA(prev.jackpot)}
                      </span>
                    </div>
                  </Link>
                ))}
              </div>
            </div>
          )}
        </motion.div>
      </main>
    </div>
  );
}

DrawDetailPage.layout = (page: React.ReactNode) => <LotoLayout>{page}</LotoLayout>;
