import { Form, Head } from '@inertiajs/react';
import { ImagePlus, X } from 'lucide-react';
import { useRef, useState } from 'react';
import { Button } from '@/components/ui/button';
import AppLayout from '@/layouts/app-layout';
import type { BreadcrumbItem } from '@/types';

type Category = { id: number; name: string };
type Props = { categories: Category[] };

const breadcrumbs: BreadcrumbItem[] = [
    { title: 'Kelas Saya', href: '/instructor/courses' },
    { title: 'Buat Course', href: '#' },
];

export default function InstructorCourseCreate({ categories }: Props) {
    const [preview, setPreview] = useState<string | null>(null);
    const [priceType, setPriceType] = useState<string>('free');
    const fileInputRef = useRef<HTMLInputElement>(null);

    function handleFileChange(e: React.ChangeEvent<HTMLInputElement>) {
        const file = e.target.files?.[0];
        if (!file) return;
        setPreview(URL.createObjectURL(file));
    }

    function clearImage() {
        setPreview(null);
        if (fileInputRef.current) fileInputRef.current.value = '';
    }

    return (
        <>
            <Head title="Buat Course Baru" />

            <div className="flex flex-col gap-6 p-4 md:p-6 max-w-2xl">
                <div>
                    <h1 className="text-xl font-bold">Buat Course Baru</h1>
                    <p className="mt-0.5 text-sm text-muted-foreground">
                        Setelah dibuat, tambahkan chapter dan lesson, lalu submit untuk review admin.
                    </p>
                </div>

                <Form action="/instructor/courses" method="post" className="rounded-xl border bg-card p-5">
                    {({ errors, processing }) => (
                        <div className="flex flex-col gap-4">
                            {/* Thumbnail */}
                            <div>
                                <label className="mb-1.5 block text-sm font-medium">Gambar Cover Kelas</label>
                                <input
                                    ref={fileInputRef}
                                    type="file"
                                    name="thumbnail"
                                    accept="image/*"
                                    className="hidden"
                                    onChange={handleFileChange}
                                />
                                {preview ? (
                                    <div className="relative w-full overflow-hidden rounded-xl border">
                                        <img src={preview} alt="Preview" className="h-48 w-full object-cover" />
                                        <button
                                            type="button"
                                            onClick={clearImage}
                                            className="absolute top-2 right-2 flex h-7 w-7 items-center justify-center rounded-full bg-black/60 text-white transition-colors hover:bg-black/80"
                                        >
                                            <X className="h-4 w-4" />
                                        </button>
                                    </div>
                                ) : (
                                    <button
                                        type="button"
                                        onClick={() => fileInputRef.current?.click()}
                                        className="flex h-48 w-full flex-col items-center justify-center gap-2 rounded-xl border-2 border-dashed transition-colors hover:border-primary hover:bg-primary/5"
                                        style={{ borderColor: 'var(--border)' }}
                                    >
                                        <ImagePlus className="h-8 w-8 text-muted-foreground" />
                                        <span className="text-sm text-muted-foreground">Klik untuk upload gambar cover</span>
                                        <span className="text-xs text-muted-foreground">PNG, JPG, WEBP — maks. 2MB</span>
                                    </button>
                                )}
                                {errors.thumbnail && <p className="mt-1 text-xs text-destructive">{errors.thumbnail}</p>}
                            </div>

                            <div>
                                <label className="mb-1.5 block text-sm font-medium">Judul Course *</label>
                                <input
                                    name="title"
                                    required
                                    className="border-input focus-visible:border-ring w-full rounded-md border bg-transparent px-3 py-2 text-sm outline-none"
                                    placeholder="Mis: Manajemen Keuangan UMKM"
                                />
                                {errors.title && <p className="mt-1 text-xs text-destructive">{errors.title}</p>}
                            </div>

                            <div>
                                <label className="mb-1.5 block text-sm font-medium">Deskripsi</label>
                                <textarea
                                    name="description"
                                    rows={4}
                                    className="border-input focus-visible:border-ring w-full rounded-md border bg-transparent px-3 py-2 text-sm outline-none"
                                    placeholder="Jelaskan apa yang akan dipelajari siswa..."
                                />
                            </div>

                            <div className="grid grid-cols-2 gap-4">
                                <div>
                                    <label className="mb-1.5 block text-sm font-medium">Kategori</label>
                                    <select
                                        name="category_id"
                                        className="border-input focus-visible:border-ring w-full rounded-md border bg-transparent px-3 py-2 text-sm outline-none"
                                    >
                                        <option value="">-- Pilih Kategori --</option>
                                        {categories.map((c) => (
                                            <option key={c.id} value={c.id}>{c.name}</option>
                                        ))}
                                    </select>
                                </div>

                                <div>
                                    <label className="mb-1.5 block text-sm font-medium">Level *</label>
                                    <select
                                        name="level"
                                        required
                                        className="border-input focus-visible:border-ring w-full rounded-md border bg-transparent px-3 py-2 text-sm outline-none"
                                    >
                                        <option value="beginner">Pemula</option>
                                        <option value="intermediate">Menengah</option>
                                        <option value="advanced">Lanjutan</option>
                                    </select>
                                </div>
                            </div>

                            <div>
                                <label className="mb-1.5 block text-sm font-medium">Tipe Harga *</label>
                                <div className="flex gap-4">
                                    <label className="flex items-center gap-2 text-sm cursor-pointer">
                                        <input type="radio" name="price_type" value="free" checked={priceType === 'free'} onChange={() => setPriceType('free')} />
                                        Gratis
                                    </label>
                                    <label className="flex items-center gap-2 text-sm cursor-pointer">
                                        <input type="radio" name="price_type" value="paid" checked={priceType === 'paid'} onChange={() => setPriceType('paid')} />
                                        Berbayar
                                    </label>
                                </div>
                            </div>

                            {priceType === 'paid' && (
                                <div className="grid gap-1.5">
                                    <label htmlFor="price" className="text-sm font-medium">Harga (Rp) *</label>
                                    <input
                                        id="price"
                                        name="price"
                                        type="number"
                                        min="0"
                                        required
                                        className="border-input focus-visible:border-ring w-full rounded-md border bg-transparent px-3 py-1.5 text-sm outline-none"
                                        placeholder="150000"
                                    />
                                    {errors.price && <p className="mt-1 text-xs text-destructive">{errors.price}</p>}
                                </div>
                            )}

                            <div className="flex gap-2 pt-2">
                                <Button type="submit" disabled={processing}>
                                    Buat Course
                                </Button>
                            </div>
                        </div>
                    )}
                </Form>
            </div>
        </>
    );
}

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