import { Head } from '@inertiajs/react';
import { Activity, Clock3, Download, Target, Trophy, Users } from 'lucide-react';
import AuthenticatedLayout from '@/layouts/AuthenticatedLayout';

interface MemberReport {
    id: number;
    name: string;
    squad_number: number;
    contributions: number;
}

interface AnswerReport {
    item_id: number;
    item_type: string;
    question: string;
    status: string;
    score: number;
    correct_ratio: number;
    time_seconds: number;
    contributors: number;
}

interface TeamReport {
    id: number;
    name: string;
    color: string;
    score: number;
    correct_answers: number;
    answer_count: number;
    correct_ratio: number;
    duration_seconds: number;
    contribution_count: number;
    members: MemberReport[];
    answers: AnswerReport[];
}

interface Props {
    session: {
        uuid: string;
        status: string;
        started_at?: string;
        completed_at?: string;
        duration_seconds?: number;
        game: { id: number; title: string; subject?: string };
        class_name?: string;
    };
    summary: {
        team_count: number;
        question_count: number;
        total_score: number;
        average_accuracy: number;
        average_time_seconds: number;
        total_contributions: number;
    };
    teams: TeamReport[];
}

const typeLabels: Record<string, string> = {
    sentence_rearrange: 'Sentence Relay',
    grouping: 'Category Relay',
    matching: 'Match Chain',
    listen_and_build: 'Listen and Build',
    error_hunter: 'Error Hunter',
    secret_taboo: 'Secret Taboo',
};

export default function Report({ session, summary, teams }: Props) {
    return (
        <AuthenticatedLayout title={`Report: ${session.game.title}`} backHref="/games">
            <Head title={`Report Team Quest - ${session.game.title}`} />

            <div className="space-y-6">
                <div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
                    <div className="flex items-center gap-3">
                        <div>
                            <p className="text-xs font-bold uppercase tracking-widest text-emerald-300">{session.class_name} · {session.game.subject}</p>
                            <p className="mt-1 text-sm text-text-muted">Status {session.status} · {summary.team_count} Team · {summary.question_count} soal</p>
                        </div>
                    </div>
                    <a href={route('team-quest.report.export', session.uuid)} className="inline-flex items-center justify-center gap-2 rounded-xl bg-emerald-500 px-5 py-3 font-black text-white hover:bg-emerald-400">
                        <Download className="h-5 w-5" /> Export CSV
                    </a>
                </div>

                <div className="grid gap-3 sm:grid-cols-2 xl:grid-cols-4">
                    <SummaryCard icon={<Trophy className="h-5 w-5" />} label="Total skor" value={summary.total_score.toLocaleString()} color="text-amber-300" />
                    <SummaryCard icon={<Target className="h-5 w-5" />} label="Rata-rata akurasi" value={`${summary.average_accuracy}%`} color="text-sky-300" />
                    <SummaryCard icon={<Clock3 className="h-5 w-5" />} label="Rata-rata waktu" value={`${summary.average_time_seconds}s`} color="text-fuchsia-300" />
                    <SummaryCard icon={<Activity className="h-5 w-5" />} label="Total kontribusi" value={summary.total_contributions.toLocaleString()} color="text-emerald-300" />
                </div>

                <div className="space-y-5">
                    {teams.map((team, rank) => (
                        <section key={team.id} className="glass overflow-hidden rounded-2xl border border-border/40">
                            <div className="flex flex-col gap-4 border-b border-border/40 p-5 lg:flex-row lg:items-center lg:justify-between">
                                <div className="flex items-center gap-4">
                                    <div className={`flex h-12 w-12 items-center justify-center rounded-2xl font-black ${rank === 0 ? 'bg-amber-500/20 text-amber-300' : 'bg-surface-hover text-text-muted'}`}>#{rank + 1}</div>
                                    <div>
                                        <h2 className="text-xl font-black">{team.name}</h2>
                                        <p className="text-sm text-text-muted">{team.correct_answers}/{team.answer_count} jawaban sempurna</p>
                                    </div>
                                </div>
                                <div className="grid grid-cols-2 gap-3 text-center sm:grid-cols-4">
                                    <Metric label="Skor" value={team.score.toLocaleString()} />
                                    <Metric label="Akurasi" value={`${team.correct_ratio}%`} />
                                    <Metric label="Durasi" value={`${team.duration_seconds}s`} />
                                    <Metric label="Kontribusi" value={team.contribution_count.toString()} />
                                </div>
                            </div>

                            <div className="grid gap-5 p-5 xl:grid-cols-[minmax(0,1fr)_minmax(0,1.5fr)]">
                                <div>
                                    <h3 className="mb-3 flex items-center gap-2 font-bold"><Users className="h-5 w-5 text-sky-300" /> Kontribusi anggota</h3>
                                    <div className="space-y-2">
                                        {team.members.map((member) => (
                                            <div key={member.id} className="flex items-center justify-between gap-3 rounded-xl bg-surface/70 px-4 py-3">
                                                <div className="min-w-0"><p className="truncate font-semibold">{member.name}</p><p className="text-xs text-text-muted">Mini-squad {member.squad_number}</p></div>
                                                <span className="shrink-0 rounded-lg bg-emerald-500/15 px-3 py-1 text-sm font-black text-emerald-300">{member.contributions}</span>
                                            </div>
                                        ))}
                                    </div>
                                </div>

                                <div className="min-w-0">
                                    <h3 className="mb-3 flex items-center gap-2 font-bold"><Target className="h-5 w-5 text-emerald-300" /> Hasil per soal</h3>
                                    <div className="overflow-x-auto rounded-xl border border-border/40">
                                        <table className="w-full min-w-[620px] text-left text-sm">
                                            <thead className="bg-surface-hover/40 text-xs uppercase text-text-muted"><tr><th className="px-4 py-3">Soal</th><th className="px-4 py-3">Akurasi</th><th className="px-4 py-3">Waktu</th><th className="px-4 py-3">Kontributor</th><th className="px-4 py-3">Poin</th></tr></thead>
                                            <tbody className="divide-y divide-border/30">
                                                {team.answers.map((answer) => (
                                                    <tr key={answer.item_id}>
                                                        <td className="max-w-xs px-4 py-3"><p className="font-semibold">{typeLabels[answer.item_type] ?? answer.item_type}</p><p className="truncate text-xs text-text-muted">{answer.question || 'Tanpa instruksi'}</p></td>
                                                        <td className="px-4 py-3 font-bold text-sky-300">{answer.correct_ratio}%</td>
                                                        <td className="px-4 py-3">{answer.time_seconds}s</td>
                                                        <td className="px-4 py-3">{answer.contributors}</td>
                                                        <td className="px-4 py-3 font-black text-emerald-300">+{answer.score}</td>
                                                    </tr>
                                                ))}
                                            </tbody>
                                        </table>
                                    </div>
                                </div>
                            </div>
                        </section>
                    ))}
                </div>

                {teams.length === 0 && <div className="glass rounded-2xl p-10 text-center text-text-muted">Belum ada data Team pada sesi ini.</div>}
            </div>
        </AuthenticatedLayout>
    );
}

function SummaryCard({ icon, label, value, color }: { icon: React.ReactNode; label: string; value: string; color: string }) {
    return <div className="glass rounded-2xl border border-border/40 p-5"><div className={`flex items-center gap-2 ${color}`}>{icon}<span className="text-xs font-bold uppercase tracking-wider">{label}</span></div><p className="mt-3 text-3xl font-black">{value}</p></div>;
}

function Metric({ label, value }: { label: string; value: string }) {
    return <div className="rounded-xl bg-surface/70 px-4 py-2"><p className="text-xs text-text-muted">{label}</p><p className="font-black">{value}</p></div>;
}
