import { Head, router, usePage } from '@inertiajs/react';
import { Calendar, CheckCircle, Clock, ExternalLink, Radio, Users, Video } from 'lucide-react';
import { useState } from 'react';
import { Button } from '@/components/ui/button';
import AppLayout from '@/layouts/app-layout';
import type { Auth, BreadcrumbItem } from '@/types';

type LiveClass = {
    id: number;
    title: string;
    description: string | null;
    scheduled_at: string;
    duration_minutes: number;
    meeting_url: string;
    recording_url: string | null;
    instructor: { id: number; name: string } | null;
    course: { id: number; title: string; slug: string } | null;
};

type Props = { liveClass: LiveClass; isRegistered: boolean; registrantCount: number };

const breadcrumbs: BreadcrumbItem[] = [
    { title: 'Live Class', href: '/live-classes' },
    { title: 'Detail', href: '#' },
];

function formatSchedule(dateStr: string) {
    const d = new Date(dateStr);
    return {
        date: d.toLocaleDateString('id-ID', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }),
        time: d.toLocaleTimeString('id-ID', { hour: '2-digit', minute: '2-digit' }),
    };
}

export default function LiveClassShow({ liveClass, isRegistered: initialRegistered, registrantCount: initialCount }: Props) {
    const { auth } = usePage<{ auth: Auth }>().props;
    const [registered, setRegistered] = useState(initialRegistered);
    const [count, setCount] = useState(initialCount);
    const [loading, setLoading] = useState(false);

    const { date, time } = formatSchedule(liveClass.scheduled_at);
    const isPast = new Date(liveClass.scheduled_at) < new Date();
    const isStartingSoon = !isPast && new Date(liveClass.scheduled_at).getTime() - Date.now() < 30 * 60 * 1000;

    function toggleRegister() {
        if (!auth?.user) {
            router.visit('/login');
            return;
        }

        setLoading(true);
        router.post(
            `/live-classes/${liveClass.id}/register`,
            {},
            {
                preserveState: true,
                onSuccess: () => {
                    setRegistered((prev) => !prev);
                    setCount((prev) => (registered ? prev - 1 : prev + 1));
                },
                onFinish: () => setLoading(false),
            },
        );
    }

    return (
        <>
            <Head title={liveClass.title} />

            <div className="flex flex-col gap-6 p-4 md:p-6 max-w-2xl">
                {/* Header */}
                <div className="flex flex-col gap-4 rounded-xl border bg-card p-5">
                    <div className="flex items-start gap-3">
                        <div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-red-500/10">
                            <Radio className={`h-5 w-5 ${isPast ? 'text-muted-foreground' : 'text-red-500'}`} />
                        </div>
                        <div className="flex-1 min-w-0">
                            <div className="flex items-center gap-2 flex-wrap">
                                <h1 className="text-lg font-bold">{liveClass.title}</h1>
                                {isStartingSoon && (
                                    <span className="rounded-full bg-red-500 px-2 py-0.5 text-xs font-medium text-white animate-pulse">
                                        Segera Mulai
                                    </span>
                                )}
                            </div>
                            {liveClass.course && (
                                <p className="text-sm text-muted-foreground">Bagian dari: {liveClass.course.title}</p>
                            )}
                        </div>
                    </div>

                    <div className="grid gap-2 text-sm sm:grid-cols-2">
                        <div className="flex items-center gap-2 text-muted-foreground">
                            <Calendar className="h-4 w-4 shrink-0" />
                            {date}
                        </div>
                        <div className="flex items-center gap-2 text-muted-foreground">
                            <Clock className="h-4 w-4 shrink-0" />
                            {time} WIB · {liveClass.duration_minutes} menit
                        </div>
                        <div className="flex items-center gap-2 text-muted-foreground">
                            <Users className="h-4 w-4 shrink-0" />
                            Instruktur: {liveClass.instructor?.name ?? '-'}
                        </div>
                        <div className="flex items-center gap-2 text-muted-foreground">
                            <CheckCircle className="h-4 w-4 shrink-0" />
                            {count} peserta terdaftar
                        </div>
                    </div>

                    {liveClass.description && (
                        <p className="text-sm text-muted-foreground border-t pt-3">{liveClass.description}</p>
                    )}

                    {/* Actions */}
                    <div className="flex flex-wrap gap-3 border-t pt-3">
                        {isPast ? (
                            liveClass.recording_url ? (
                                <Button asChild>
                                    <a href={liveClass.recording_url} target="_blank" rel="noopener noreferrer">
                                        <Video className="mr-1.5 h-4 w-4" />
                                        Tonton Rekaman
                                    </a>
                                </Button>
                            ) : (
                                <p className="text-sm text-muted-foreground">Rekaman belum tersedia.</p>
                            )
                        ) : (
                            <>
                                <Button
                                    variant={registered ? 'outline' : 'default'}
                                    onClick={toggleRegister}
                                    disabled={loading}
                                >
                                    <CheckCircle className="mr-1.5 h-4 w-4" />
                                    {registered ? 'Batal Daftar' : 'Daftar Sekarang'}
                                </Button>

                                {registered && (
                                    <Button asChild variant="secondary">
                                        <a href={liveClass.meeting_url} target="_blank" rel="noopener noreferrer">
                                            <ExternalLink className="mr-1.5 h-4 w-4" />
                                            Buka Meeting Link
                                        </a>
                                    </Button>
                                )}
                            </>
                        )}
                    </div>
                </div>

                {/* Reminder info for registered users */}
                {registered && !isPast && (
                    <div className="rounded-lg border border-blue-200 bg-blue-50 p-3 text-sm text-blue-700 dark:border-blue-800 dark:bg-blue-900/20 dark:text-blue-400">
                        Kamu sudah terdaftar! Simpan link meeting dan hadir tepat waktu.
                    </div>
                )}
            </div>
        </>
    );
}

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