import React from 'react';
import { Head, usePage } from '@inertiajs/react';
import { Trophy, Target, Clock, Repeat, Download } from 'lucide-react';
import AuthenticatedLayout from '@/layouts/AuthenticatedLayout';
import { cn } from '@/lib/utils';
import type { PageProps } from '@/types';

interface LeaderboardEntry {
    rank: number;
    student_name: string;
    grade: number;
    points: number;
    attempt_number: number;
    time_taken_seconds: number;
}

interface QuizLeaderboardProps extends PageProps {
    assignment: {
        id: number;
        title: string;
        classes?: Array<{ id: number; name: string }>;
        material: {
            title: string;
            classes?: Array<{ id: number; name: string }>;
            synced_class: { id: number; name: string } | null;
        };
    };
    leaderboard: LeaderboardEntry[];
    totalParticipants: number;
    averageGrade: number;
}

export default function QuizLeaderboard() {
    const { assignment, leaderboard, totalParticipants, averageGrade } = usePage<QuizLeaderboardProps>().props;
    const classNames = assignment.classes?.length
        ? assignment.classes.map((classItem) => classItem.name).join(', ')
        : assignment.material.classes?.length
            ? assignment.material.classes.map((classItem) => classItem.name).join(', ')
            : assignment.material.synced_class?.name ?? '-';

    const formatTime = (seconds: number) => {
        const m = Math.floor(seconds / 60);
        const s = seconds % 60;
        return `${m}m ${s}s`;
    };

    const getRankBadge = (rank: number) => {
        if (rank === 1) return 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30';
        if (rank === 2) return 'bg-slate-400/20 text-slate-300 border-slate-400/30';
        if (rank === 3) return 'bg-amber-700/20 text-amber-600 border-amber-700/30';
        return 'bg-surface border-border/50 text-text-muted';
    };

    return (
        <AuthenticatedLayout title={`Leaderboard: ${assignment.title}`} backHref="/assignments">
            <Head title={`Leaderboard: ${assignment.title}`} />

            <div className="mx-auto max-w-4xl space-y-6">
                {/* Header */}
                <div className="glass rounded-2xl p-8 border border-border/40 text-center">
                    <div className="inline-flex items-center justify-center w-16 h-16 rounded-full bg-emerald-500/20 mb-4">
                        <Trophy className="h-8 w-8 text-emerald-400" />
                    </div>
                    <p className="text-sm text-text-muted mt-1">
                        {assignment.material.title} &bull; Kelas {classNames}
                    </p>
                    <div className="flex items-center justify-center gap-6 mt-4">
                        <div className="text-center">
                            <p className="text-2xl font-bold text-text-light">{totalParticipants}</p>
                            <p className="text-xs text-text-muted">Peserta</p>
                        </div>
                        <div className="text-center">
                            <p className="text-2xl font-bold text-text-light">{averageGrade}%</p>
                            <p className="text-xs text-text-muted">Rata-rata</p>
                        </div>
                    </div>
                </div>

                {/* Leaderboard Table */}
                <div className="glass rounded-2xl border border-border/40 overflow-hidden">
                    <div className="overflow-x-auto">
                        <table className="w-full text-sm">
                            <thead className="bg-surface-hover/30 text-xs uppercase text-text-muted">
                                <tr>
                                    <th className="px-6 py-4 text-left">#</th>
                                    <th className="px-6 py-4 text-left">Nama Siswa</th>
                                    <th className="px-6 py-4 text-center">Nilai</th>
                                    <th className="px-6 py-4 text-center">Attempt</th>
                                    <th className="px-6 py-4 text-center">Waktu</th>
                                    <th className="px-6 py-4 text-right">Poin</th>
                                </tr>
                            </thead>
                            <tbody className="divide-y divide-border/40">
                                {leaderboard.length > 0 ? (
                                    leaderboard.map((entry) => (
                                        <tr key={entry.rank} className="hover:bg-surface-hover/20 transition-colors">
                                            <td className="px-6 py-4">
                                                <div
                                                    className={cn(
                                                        'inline-flex items-center justify-center w-8 h-8 rounded-full border text-xs font-bold',
                                                        getRankBadge(entry.rank)
                                                    )}
                                                >
                                                    {entry.rank}
                                                </div>
                                            </td>
                                            <td className="px-6 py-4 font-medium text-text-light">
                                                {entry.student_name}
                                            </td>
                                            <td className="px-6 py-4 text-center">
                                                <span className="font-bold text-text-light">{entry.grade}%</span>
                                            </td>
                                            <td className="px-6 py-4 text-center">
                                                <span className="inline-flex items-center gap-1 text-text-muted">
                                                    <Repeat className="h-3.5 w-3.5" />
                                                    {entry.attempt_number}
                                                </span>
                                            </td>
                                            <td className="px-6 py-4 text-center">
                                                <span className="inline-flex items-center gap-1 text-text-muted">
                                                    <Clock className="h-3.5 w-3.5" />
                                                    {formatTime(entry.time_taken_seconds)}
                                                </span>
                                            </td>
                                            <td className="px-6 py-4 text-right">
                                                <span className="font-bold text-emerald-400">
                                                    {entry.points.toLocaleString()}
                                                </span>
                                            </td>
                                        </tr>
                                    ))
                                ) : (
                                    <tr>
                                        <td colSpan={6} className="px-6 py-12 text-center text-text-muted">
                                            <Trophy className="mx-auto h-12 w-12 opacity-20 mb-3" />
                                            <p>Belum ada peserta.</p>
                                        </td>
                                    </tr>
                                )}
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </AuthenticatedLayout>
    );
}
