import { Head, Link } from '@inertiajs/react';
import {
    ArrowUpRight,
    CalendarClock,
    Mail,
    Map,
    UserRound,
    Users,
} from 'lucide-react';
import { home } from '@/routes';
import { Badge } from '@/components/ui/badge';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { dashboard } from '@/routes/admin';
import { index as routesIndex } from '@/routes/admin/routes';
import { index as subscribersIndex } from '@/routes/admin/subscribers';
import type { UserRole } from '@/types';

type Props = {
    metrics: {
        customers: number;
        drivers: number;
        routes: number;
        upcomingBookings: number;
        subscribers: number;
    };
    recentUsers: {
        id: number;
        name: string;
        email: string;
        role: UserRole;
        email_verified_at: string | null;
        created_at: string;
    }[];
    recentSubscribers: { id: number; email: string; created_at: string }[];
};

const formatDate = (value: string) =>
    new Date(value).toLocaleDateString('en-US', {
        month: 'short',
        day: 'numeric',
        year: 'numeric',
    });

export default function AdminDashboard({
    metrics,
    recentUsers,
    recentSubscribers,
}: Props) {
    const cards = [
        { label: 'Customers', value: metrics.customers, icon: Users },
        { label: 'Drivers', value: metrics.drivers, icon: UserRound },
        {
            label: 'Upcoming bookings',
            value: metrics.upcomingBookings,
            icon: CalendarClock,
        },
        { label: 'Active routes', value: metrics.routes, icon: Map },
        {
            label: 'Newsletter subscribers',
            value: metrics.subscribers,
            icon: Mail,
        },
    ];

    return (
        <>
            <Head title="Admin overview" />
            <div className="mx-auto w-full max-w-[1720px] space-y-8 p-5 sm:p-8 lg:p-10">
                <section className="relative overflow-hidden rounded-2xl bg-[linear-gradient(115deg,#0b1f33_0%,#12364a_65%,#1b4960_100%)] px-6 py-7 text-white shadow-lg shadow-navy/15 sm:px-9 sm:py-9">
                    <div className="pointer-events-none absolute -right-12 -top-24 size-72 rounded-full border-[36px] border-white/5" />
                    <div className="relative flex flex-wrap items-end justify-between gap-6">
                        <div>
                            <p className="mb-2 text-xs font-semibold tracking-[0.22em] text-gold uppercase sm:text-sm">
                                ZozTrip operations
                            </p>
                            <h1 className="font-google text-3xl font-semibold tracking-tight sm:text-4xl">
                                Admin overview
                            </h1>
                            <p className="mt-2 text-base text-white/75 sm:text-lg">
                                A clear snapshot of your bookings, routes and community.
                            </p>
                        </div>
                        <Link
                            href={home()}
                            className="inline-flex items-center gap-2 rounded-lg border border-white/20 bg-white/10 px-4 py-2.5 text-sm font-semibold text-white transition-colors hover:bg-white/20 sm:text-base"
                        >
                            View website <ArrowUpRight className="size-4" />
                        </Link>
                    </div>
                </section>

                <section aria-label="Key metrics" className="grid gap-4 sm:grid-cols-2 xl:grid-cols-5">
                    {cards.map(({ label, value, icon: Icon }, index) => (
                        <Card
                            key={label}
                            className="group overflow-hidden border-navy/10 bg-white transition duration-200 hover:-translate-y-0.5 hover:border-gold/60 hover:shadow-lg dark:border-white/10 dark:bg-[#12304a]"
                        >
                            <CardHeader className="flex flex-row items-center justify-between gap-3 pb-3">
                                <CardTitle className="text-sm font-medium leading-snug text-muted-foreground sm:text-base">
                                    {label}
                                </CardTitle>
                                <span className="flex size-11 shrink-0 items-center justify-center rounded-xl bg-gold/15 text-gold-dark dark:bg-gold/20 dark:text-gold">
                                    <Icon className="size-5" />
                                </span>
                            </CardHeader>
                            <CardContent>
                                <p className="text-4xl font-semibold tracking-tight text-navy tabular-nums dark:text-white">
                                    {value.toLocaleString()}
                                </p>
                                <p className="mt-2 text-xs text-muted-foreground sm:text-sm">
                                    {index === 2 ? 'Scheduled ahead' : index === 3 ? 'Available to customers' : 'On ZozTrip'}
                                </p>
                            </CardContent>
                        </Card>
                    ))}
                </section>

                <section className="grid items-stretch gap-6 xl:grid-cols-[minmax(0,1.7fr)_minmax(320px,1fr)]">
                    <Card className="overflow-hidden">
                        <CardHeader className="flex flex-row items-center justify-between border-b border-navy/10 px-6 py-5 dark:border-white/10 sm:px-7">
                            <div>
                                <CardTitle className="text-lg sm:text-xl">Newest users</CardTitle>
                                <p className="mt-1 text-sm text-muted-foreground sm:text-base">
                                    Recent registrations on your platform
                                </p>
                            </div>
                            <span className="hidden size-11 items-center justify-center rounded-xl bg-navy/5 text-navy dark:bg-white/10 dark:text-gold sm:flex">
                                <Users className="size-5" />
                            </span>
                        </CardHeader>
                        <CardContent className="overflow-x-auto px-5 py-3 sm:px-7">
                            <table className="w-full min-w-[640px] text-sm sm:text-base">
                                <thead className="text-left text-xs font-semibold tracking-wide text-muted-foreground uppercase sm:text-sm">
                                    <tr>
                                        <th className="py-3 pr-4">Name</th>
                                        <th className="py-3 pr-4">Role</th>
                                        <th className="py-3 pr-4">Status</th>
                                        <th className="py-3">Joined</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    {recentUsers.map((user) => (
                                        <tr key={user.id} className="border-t border-navy/10 dark:border-white/10">
                                            <td className="py-4 pr-4">
                                                <p className="font-semibold text-navy dark:text-white">{user.name}</p>
                                                <p className="mt-0.5 text-sm text-muted-foreground">{user.email}</p>
                                            </td>
                                            <td className="py-4 pr-4 capitalize">{user.role}</td>
                                            <td className="py-4 pr-4">
                                                <Badge variant={user.email_verified_at ? 'secondary' : 'outline'} className="px-2.5 py-1 text-xs">
                                                    {user.email_verified_at ? 'Verified' : 'Unverified'}
                                                </Badge>
                                            </td>
                                            <td className="py-4 whitespace-nowrap">{formatDate(user.created_at)}</td>
                                        </tr>
                                    ))}
                                    {recentUsers.length === 0 && (
                                        <tr>
                                            <td colSpan={4} className="py-10 text-center text-muted-foreground">
                                                No users have registered yet.
                                            </td>
                                        </tr>
                                    )}
                                </tbody>
                            </table>
                        </CardContent>
                    </Card>

                    <Card className="flex flex-col overflow-hidden">
                        <CardHeader className="flex flex-row items-start justify-between gap-4 border-b border-navy/10 px-6 py-5 dark:border-white/10 sm:px-7">
                            <div>
                                <CardTitle className="text-lg sm:text-xl">Latest subscribers</CardTitle>
                                <p className="mt-1 text-sm text-muted-foreground sm:text-base">
                                    People following your updates
                                </p>
                            </div>
                            <span className="flex size-11 shrink-0 items-center justify-center rounded-xl bg-gold/15 text-gold-dark dark:bg-gold/20 dark:text-gold">
                                <Mail className="size-5" />
                            </span>
                        </CardHeader>
                        <CardContent className="flex flex-1 flex-col px-6 py-5 sm:px-7">
                            {recentSubscribers.length === 0 ? (
                                <div className="flex flex-1 flex-col items-center justify-center py-8 text-center">
                                    <span className="flex size-14 items-center justify-center rounded-full bg-navy/5 text-navy/50 dark:bg-white/10 dark:text-white/60">
                                        <Mail className="size-6" />
                                    </span>
                                    <p className="mt-4 text-base font-semibold">No subscribers yet</p>
                                    <p className="mt-1 max-w-xs text-sm text-muted-foreground">
                                        Newsletter signups from the website will show up here.
                                    </p>
                                </div>
                            ) : (
                                <ul className="space-y-4 text-sm sm:text-base">
                                    {recentSubscribers.map((subscriber) => (
                                        <li key={subscriber.id} className="flex items-center justify-between gap-3 border-b border-navy/10 pb-3 last:border-0 dark:border-white/10">
                                            <span className="truncate font-medium">{subscriber.email}</span>
                                            <span className="shrink-0 text-sm text-muted-foreground">{formatDate(subscriber.created_at)}</span>
                                        </li>
                                    ))}
                                </ul>
                            )}
                            <div className="mt-auto space-y-2 border-t border-navy/10 pt-4 dark:border-white/10">
                                <Link
                                    href={subscribersIndex()}
                                    className="flex items-center justify-between rounded-lg px-3 py-3 text-sm font-semibold text-navy transition-colors hover:bg-gold/10 hover:text-gold-dark dark:text-white dark:hover:text-gold sm:text-base"
                                >
                                    Manage subscribers <ArrowUpRight className="size-4" />
                                </Link>
                                <Link
                                    href={routesIndex()}
                                    className="flex items-center justify-between rounded-lg px-3 py-3 text-sm font-semibold text-navy transition-colors hover:bg-gold/10 hover:text-gold-dark dark:text-white dark:hover:text-gold sm:text-base"
                                >
                                    Manage home page routes <Map className="size-4" />
                                </Link>
                            </div>
                        </CardContent>
                    </Card>
                </section>
            </div>
        </>
    );
}

AdminDashboard.layout = {
    breadcrumbs: [{ title: 'Admin', href: dashboard() }],
};
