import { Form, Head, Link } from '@inertiajs/react';
import { MessageSquare, Pin, Plus } from 'lucide-react';
import { useState } from 'react';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import AppLayout from '@/layouts/app-layout';
import type { BreadcrumbItem } from '@/types';

type Discussion = {
    id: number;
    title: string;
    body: string;
    is_pinned: boolean;
    replies_count: number;
    created_at: string;
    user: { name: string };
    lesson: { title: string } | null;
};

type Paginator<T> = {
    data: T[];
    current_page: number;
    last_page: number;
    total: number;
    links: { url: string | null; label: string; active: boolean }[];
};

type Course = { id: number; title: string; slug: string };
type Props = { course: Course; discussions: Paginator<Discussion> };

function timeAgo(date: string) {
    const diff = Math.floor((Date.now() - new Date(date).getTime()) / 1000);
    if (diff < 60) return 'Baru saja';
    if (diff < 3600) return `${Math.floor(diff / 60)} mnt lalu`;
    if (diff < 86400) return `${Math.floor(diff / 3600)} jam lalu`;
    return `${Math.floor(diff / 86400)} hari lalu`;
}

export default function DiscussionsIndex({ course, discussions }: Props) {
    const [showForm, setShowForm] = useState(false);

    const breadcrumbs: BreadcrumbItem[] = [
        { title: course.title, href: `/courses/${course.slug}` },
        { title: 'Diskusi', href: `/courses/${course.slug}/discussions` },
    ];

    return (
        <>
            <Head title={`Diskusi — ${course.title}`} />

            <div className="mx-auto max-w-6xl flex flex-col gap-6 px-5 py-8">
                <div className="flex items-center justify-between">
                    <div>
                        <h1 className="text-2xl font-bold">Forum Diskusi</h1>
                        <p className="text-sm text-muted-foreground">{course.title}</p>
                    </div>
                    <Button size="sm" onClick={() => setShowForm(!showForm)} className="gap-1">
                        <Plus className="h-4 w-4" />
                        Mulai Diskusi
                    </Button>
                </div>

                {showForm && (
                    <Form
                        action={`/courses/${course.slug}/discussions`}
                        method="post"
                        onSuccess={() => setShowForm(false)}
                        className="rounded-xl border bg-muted/20 p-4"
                    >
                        {({ processing, errors }) => (
                            <div className="flex flex-col gap-3">
                                <div className="grid gap-1">
                                    <Label>Judul Diskusi</Label>
                                    <Input name="title" placeholder="Apa yang ingin kamu diskusikan?" required />
                                    {errors.title && <p className="text-xs text-destructive">{errors.title}</p>}
                                </div>
                                <div className="grid gap-1">
                                    <Label>Deskripsi</Label>
                                    <textarea
                                        name="body"
                                        rows={4}
                                        placeholder="Jelaskan lebih detail..."
                                        className="border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 flex w-full rounded-md border bg-transparent px-3 py-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]"
                                        required
                                    />
                                    {errors.body && <p className="text-xs text-destructive">{errors.body}</p>}
                                </div>
                                <div className="flex gap-2">
                                    <Button type="submit" disabled={processing} size="sm">Kirim</Button>
                                    <Button type="button" variant="outline" size="sm" onClick={() => setShowForm(false)}>Batal</Button>
                                </div>
                            </div>
                        )}
                    </Form>
                )}

                <div className="flex flex-col gap-3">
                    {discussions.data.length === 0 && (
                        <div className="rounded-xl border border-dashed p-12 text-center">
                            <MessageSquare className="mx-auto mb-3 h-10 w-10 text-muted-foreground/30" />
                            <p className="font-medium">Belum ada diskusi</p>
                            <p className="mt-1 text-sm text-muted-foreground">Jadilah yang pertama memulai diskusi!</p>
                        </div>
                    )}

                    {discussions.data.map((d) => (
                        <Link
                            key={d.id}
                            href={`/courses/${course.slug}/discussions/${d.id}`}
                            className="flex gap-3 rounded-xl border bg-card p-4 shadow-sm hover:shadow-md transition-shadow"
                        >
                            <div className="flex-1 min-w-0">
                                <div className="flex items-start gap-2">
                                    {d.is_pinned && <Pin className="mt-0.5 h-3.5 w-3.5 shrink-0 text-amber-500" />}
                                    <p className="font-medium">{d.title}</p>
                                </div>
                                <p className="mt-1 line-clamp-2 text-sm text-muted-foreground">{d.body}</p>
                                <div className="mt-2 flex items-center gap-3 text-xs text-muted-foreground">
                                    <span>{d.user.name}</span>
                                    <span>·</span>
                                    <span>{timeAgo(d.created_at)}</span>
                                    {d.lesson && (
                                        <>
                                            <span>·</span>
                                            <span className="truncate">Lesson: {d.lesson.title}</span>
                                        </>
                                    )}
                                </div>
                            </div>
                            <div className="flex shrink-0 items-center gap-1 text-sm text-muted-foreground">
                                <MessageSquare className="h-4 w-4" />
                                <span>{d.replies_count}</span>
                            </div>
                        </Link>
                    ))}
                </div>
            </div>
        </>
    );
}

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