import { Head, Link } from '@inertiajs/react';
import { BookOpen, CreditCard, Users, TrendingUp, Clock, CheckCircle2, ArrowRight, GraduationCap } from 'lucide-react';
import AppLayout from '@/layouts/app-layout';
import type { BreadcrumbItem } from '@/types';

type Stats = {
    totalUsers: number;
    totalInstructors: number;
    totalCourses: number;
    activeCourses: number;
    totalEnrollments: number;
    activeEnrollments: number;
    pendingPayments: number;
    totalRevenue: number;
};

type EnrollmentItem = {
    id: number;
    user: { name: string; email: string };
    course: { title: string };
    created_at: string;
};

type PaymentItem = {
    id: number;
    user: { name: string; email: string };
    course: { title: string };
    created_at: string;
};

type Props = {
    stats: Stats;
    recentEnrollments: EnrollmentItem[];
    pendingPayments: PaymentItem[];
};

const breadcrumbs: BreadcrumbItem[] = [{ title: 'Admin Dashboard', href: '/admin' }];

function getInitials(name: string) {
    return name
        .split(' ')
        .slice(0, 2)
        .map((n) => n[0])
        .join('')
        .toUpperCase();
}

type StatCardProps = {
    label: string;
    value: number | string;
    sub?: string;
    icon: React.ElementType;
    bgClass: string;
    textClass: string;
    iconBgClass: string;
    href: string;
};

function StatCard({ label, value, sub, icon: Icon, bgClass, textClass, iconBgClass, href }: StatCardProps) {
    return (
        <Link href={href} className="group block">
            <div className={`relative overflow-hidden rounded-2xl p-5 shadow-sm transition-all duration-200 hover:shadow-md hover:-translate-y-0.5 ${bgClass}`}>
                <div className="flex items-start justify-between">
                    <div>
                        <p className={`text-sm font-medium opacity-70 ${textClass}`}>{label}</p>
                        <p className={`mt-1.5 text-2xl font-bold ${textClass}`}>{typeof value === 'number' ? value.toLocaleString() : value}</p>
                        {sub && <p className={`mt-1 text-xs opacity-60 ${textClass}`}>{sub}</p>}
                    </div>
                    <div className={`rounded-xl p-2.5 ${iconBgClass}`}>
                        <Icon className={`h-6 w-6 ${textClass}`} />
                    </div>
                </div>
                <div className={`mt-4 flex items-center gap-1 text-xs opacity-60 group-hover:opacity-100 transition-opacity ${textClass}`}>
                    <span>Lihat detail</span>
                    <ArrowRight className="h-3 w-3" />
                </div>
                <div className={`absolute -right-4 -top-4 h-20 w-20 rounded-full opacity-40 ${iconBgClass}`} />
                <div className={`absolute -right-2 -bottom-6 h-28 w-28 rounded-full opacity-25 ${iconBgClass}`} />
            </div>
        </Link>
    );
}

export default function AdminDashboard({ stats, recentEnrollments, pendingPayments }: Props) {
    return (
        <>
            <Head title="Admin Dashboard" />

            <div className="flex flex-col gap-6 p-4 md:p-6">
                {/* Hero header */}
                <div className="relative overflow-hidden rounded-2xl border border-blue-200 bg-gradient-to-br from-blue-100 via-sky-50 to-indigo-100 p-6 shadow-sm dark:border-blue-800/30 dark:from-blue-950/50 dark:via-sky-950/40 dark:to-indigo-950/40">
                    <div className="relative z-10">
                        <div className="flex items-center gap-3 mb-1">
                            <div className="flex h-10 w-10 items-center justify-center rounded-xl bg-blue-200 dark:bg-blue-800/60">
                                <GraduationCap className="h-5 w-5 text-blue-700 dark:text-blue-300" />
                            </div>
                            <div>
                                <h1 className="text-2xl font-bold text-blue-900 dark:text-blue-100">Dashboard Admin</h1>
                                <p className="text-sm text-blue-600 dark:text-blue-400">Pantau dan kelola seluruh aktivitas platform</p>
                            </div>
                        </div>
                    </div>
                    <div className="absolute right-6 top-1/2 -translate-y-1/2 hidden sm:block">
                        <div className="flex gap-3 text-center">
                            <div className="rounded-xl bg-blue-200/60 px-4 py-3 dark:bg-blue-800/40">
                                <p className="text-2xl font-bold text-blue-900 dark:text-blue-100">{stats.totalInstructors}</p>
                                <p className="text-xs text-blue-600 dark:text-blue-400">Instruktur</p>
                            </div>
                            <div className="rounded-xl bg-sky-200/60 px-4 py-3 dark:bg-sky-800/40">
                                <p className="text-2xl font-bold text-blue-900 dark:text-blue-100">{stats.activeCourses}</p>
                                <p className="text-xs text-blue-600 dark:text-blue-400">Kelas Aktif</p>
                            </div>
                            <div className="rounded-xl bg-indigo-200/60 px-4 py-3 dark:bg-indigo-800/40">
                                <p className="text-2xl font-bold text-blue-900 dark:text-blue-100">{stats.activeEnrollments}</p>
                                <p className="text-xs text-blue-600 dark:text-blue-400">Siswa Aktif</p>
                            </div>
                        </div>
                    </div>
                    <div className="absolute -left-8 -bottom-8 h-32 w-32 rounded-full bg-blue-200/30 dark:bg-blue-700/10" />
                    <div className="absolute right-40 -top-6 h-24 w-24 rounded-full bg-indigo-200/30 dark:bg-indigo-700/10" />
                </div>

                {/* Stat cards */}
                <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
                    <StatCard
                        label="Total Pemasukan"
                        value={`Rp ${stats.totalRevenue.toLocaleString('id-ID')}`}
                        icon={TrendingUp}
                        bgClass="bg-emerald-100 dark:bg-emerald-900/30"
                        textClass="text-emerald-800 dark:text-emerald-200"
                        iconBgClass="bg-emerald-200 dark:bg-emerald-800/60"
                        href="/admin/payments"
                    />
                    <StatCard
                        label="Total Siswa"
                        value={stats.totalUsers}
                        icon={Users}
                        bgClass="bg-blue-100 dark:bg-blue-900/30"
                        textClass="text-blue-800 dark:text-blue-200"
                        iconBgClass="bg-blue-200 dark:bg-blue-800/60"
                        href="/admin/users"
                    />
                    <StatCard
                        label="Total Kelas"
                        value={stats.totalCourses}
                        icon={BookOpen}
                        bgClass="bg-teal-100 dark:bg-teal-900/30"
                        textClass="text-teal-800 dark:text-teal-200"
                        iconBgClass="bg-teal-200 dark:bg-teal-800/60"
                        href="/admin/courses"
                    />
                    <StatCard
                        label="Pembayaran Pending"
                        value={stats.pendingPayments}
                        icon={CreditCard}
                        bgClass="bg-amber-100 dark:bg-amber-900/30"
                        textClass="text-amber-800 dark:text-amber-200"
                        iconBgClass="bg-amber-200 dark:bg-amber-800/60"
                        href="/admin/payments"
                    />
                </div>

                {/* Activity panels */}
                <div className="grid gap-6 lg:grid-cols-2">
                    {/* Recent enrollments */}
                    <div className="overflow-hidden rounded-2xl border border-blue-100 bg-white shadow-sm dark:border-blue-900/30 dark:bg-card">
                        <div className="flex items-center justify-between border-b border-blue-50 bg-gradient-to-r from-blue-50 to-indigo-50 px-5 py-4 dark:border-blue-900/20 dark:from-blue-950/40 dark:to-indigo-950/40">
                            <div className="flex items-center gap-2">
                                <div className="flex h-7 w-7 items-center justify-center rounded-lg bg-blue-100 dark:bg-blue-900/50">
                                    <CheckCircle2 className="h-4 w-4 text-blue-600 dark:text-blue-400" />
                                </div>
                                <h2 className="font-semibold text-blue-900 dark:text-blue-100">Pendaftaran Terbaru</h2>
                            </div>
                            <Link
                                href="/admin/courses"
                                className="flex items-center gap-1 rounded-lg px-2.5 py-1 text-xs font-medium text-blue-600 hover:bg-blue-100 dark:text-blue-400 dark:hover:bg-blue-900/30 transition-colors"
                            >
                                Lihat semua <ArrowRight className="h-3 w-3" />
                            </Link>
                        </div>
                        {recentEnrollments.length === 0 ? (
                            <div className="flex flex-col items-center justify-center py-12 text-center">
                                <div className="mb-3 flex h-12 w-12 items-center justify-center rounded-full bg-blue-50 dark:bg-blue-900/20">
                                    <CheckCircle2 className="h-6 w-6 text-blue-300" />
                                </div>
                                <p className="text-sm text-muted-foreground">Belum ada pendaftaran</p>
                            </div>
                        ) : (
                            <ul className="divide-y divide-blue-50 dark:divide-blue-900/20">
                                {recentEnrollments.map((e) => (
                                    <li key={e.id} className="flex items-center gap-3 px-5 py-3.5 hover:bg-blue-50/50 dark:hover:bg-blue-900/10 transition-colors">
                                        <div className="flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-blue-400 to-indigo-400 text-xs font-bold text-white shadow-sm">
                                            {getInitials(e.user.name)}
                                        </div>
                                        <div className="min-w-0 flex-1">
                                            <p className="truncate text-sm font-medium">{e.user.name}</p>
                                            <p className="truncate text-xs text-muted-foreground">{e.course.title}</p>
                                        </div>
                                        <div className="flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-emerald-100 dark:bg-emerald-900/30">
                                            <CheckCircle2 className="h-3.5 w-3.5 text-emerald-600 dark:text-emerald-400" />
                                        </div>
                                    </li>
                                ))}
                            </ul>
                        )}
                    </div>

                    {/* Pending payments */}
                    <div className="overflow-hidden rounded-2xl border border-amber-100 bg-white shadow-sm dark:border-amber-900/30 dark:bg-card">
                        <div className="flex items-center justify-between border-b border-amber-50 bg-gradient-to-r from-amber-50 to-orange-50 px-5 py-4 dark:border-amber-900/20 dark:from-amber-950/30 dark:to-orange-950/30">
                            <div className="flex items-center gap-2">
                                <div className="flex h-7 w-7 items-center justify-center rounded-lg bg-amber-100 dark:bg-amber-900/50">
                                    <Clock className="h-4 w-4 text-amber-600 dark:text-amber-400" />
                                </div>
                                <h2 className="font-semibold text-amber-900 dark:text-amber-100">Pembayaran Perlu Diverifikasi</h2>
                            </div>
                            <Link
                                href="/admin/payments"
                                className="flex items-center gap-1 rounded-lg px-2.5 py-1 text-xs font-medium text-amber-600 hover:bg-amber-100 dark:text-amber-400 dark:hover:bg-amber-900/30 transition-colors"
                            >
                                Lihat semua <ArrowRight className="h-3 w-3" />
                            </Link>
                        </div>
                        {pendingPayments.length === 0 ? (
                            <div className="flex flex-col items-center justify-center py-12 text-center">
                                <div className="mb-3 flex h-12 w-12 items-center justify-center rounded-full bg-amber-50 dark:bg-amber-900/20">
                                    <CreditCard className="h-6 w-6 text-amber-300" />
                                </div>
                                <p className="text-sm text-muted-foreground">Tidak ada pembayaran pending</p>
                            </div>
                        ) : (
                            <ul className="divide-y divide-amber-50 dark:divide-amber-900/20">
                                {pendingPayments.map((p) => (
                                    <li key={p.id} className="flex items-center gap-3 px-5 py-3.5 hover:bg-amber-50/50 dark:hover:bg-amber-900/10 transition-colors">
                                        <div className="flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-amber-400 to-orange-400 text-xs font-bold text-white shadow-sm">
                                            {getInitials(p.user.name)}
                                        </div>
                                        <div className="min-w-0 flex-1">
                                            <p className="truncate text-sm font-medium">{p.user.name}</p>
                                            <p className="truncate text-xs text-muted-foreground">{p.course.title}</p>
                                        </div>
                                        <Link
                                            href="/admin/payments"
                                            className="shrink-0 rounded-lg bg-amber-400 px-3 py-1 text-xs font-semibold text-amber-900 hover:bg-amber-500 transition-colors shadow-sm"
                                        >
                                            Verifikasi
                                        </Link>
                                    </li>
                                ))}
                            </ul>
                        )}
                    </div>
                </div>
            </div>
        </>
    );
}

AdminDashboard.layout = (page: React.ReactNode) => <AppLayout breadcrumbs={breadcrumbs}>{page}</AppLayout>;
