import { Head, Link, useForm } from '@inertiajs/react';
import { useState } from 'react';
import { router } from '@inertiajs/react';
import { ConfirmDialog } from '@/components/admin/confirm-dialog';
import { ImageUpload } from '@/components/admin/image-upload';
import { RichText } from '@/components/admin/rich-text';
import { DatePicker } from '@/components/admin/date-picker';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';

interface Post {
    id: number; title: string; excerpt: string | null; content: string | null;
    featured_image: string | null; status: string; published_at: string | null;
}

export default function PostEdit({ post }: { post: Post }) {
    const { data, setData, post: submit, processing, errors } = useForm<{
        _method: string; title: string; excerpt: string; content: string;
        featured_image: File | null; featured_image_clear: boolean;
        status: string; published_at: string | null;
    }>({
        _method: 'PUT',
        title: post.title,
        excerpt: post.excerpt ?? '',
        content: post.content ?? '',
        featured_image: null,
        featured_image_clear: false,
        status: post.status,
        published_at: post.published_at ? post.published_at.split('T')[0] : null,
    });

    const [imageKey, setImageKey] = useState(0);
    const [confirmDelete, setConfirmDelete] = useState(false);

    return (
        <>
            <Head title="Edit Post" />
            <form onSubmit={(e) => { e.preventDefault(); submit(`/admin/posts/${post.id}`); }} className="space-y-0">
                <div className="sticky top-16 z-10 -mx-6 mb-6 flex items-center justify-between border-b bg-background px-6 pb-4 pt-2 lg:-mx-8 lg:px-8">
                    <div>
                        <div className="flex items-center gap-2 text-sm text-muted-foreground">
                            <Link href="/admin/posts">News</Link>
                            <span>/</span>
                            <span className="text-foreground">Edit Post</span>
                        </div>
                        <h1 className="text-2xl font-bold">Edit Post</h1>
                    </div>
                    <div className="flex items-center gap-3">
                        <Button type="button" variant="outline" asChild>
                            <Link href="/admin/posts">Cancel</Link>
                        </Button>
                        <Button type="button" variant="destructive" onClick={() => setConfirmDelete(true)}>Delete</Button>
                        <Button type="submit" disabled={processing}>{processing ? 'Saving...' : 'Save Changes'}</Button>
                    </div>
                </div>

                <div className="grid grid-cols-1 gap-6 lg:grid-cols-[1fr_320px]">
                    {/* Main */}
                    <div className="space-y-6">
                        <div className="rounded-xl border border-border bg-card p-6 space-y-4">
                            <div className="space-y-1.5">
                                <Label htmlFor="title">Title *</Label>
                                <Input id="title" value={data.title} onChange={(e) => setData('title', e.target.value)} required />
                                {errors.title && <p className="text-xs text-destructive">{errors.title}</p>}
                            </div>
                            <div className="space-y-1.5">
                                <Label>Excerpt</Label>
                                <RichText value={data.excerpt} onChange={(v) => setData('excerpt', v)} height={150} />
                            </div>
                            <div className="space-y-1.5">
                                <Label>Content</Label>
                                <RichText value={data.content} onChange={(v) => setData('content', v)} height={500} />
                            </div>
                        </div>
                    </div>

                    {/* Sidebar */}
                    <div className="space-y-6">
                        <div className="rounded-xl border border-border bg-card p-6 space-y-4">
                            <h2 className="font-semibold">Publish</h2>
                            <div className="space-y-1.5">
                                <Label>Status</Label>
                                <Select value={data.status} onValueChange={(v) => setData('status', v)}>
                                    <SelectTrigger><SelectValue /></SelectTrigger>
                                    <SelectContent>
                                        <SelectItem value="draft">Draft</SelectItem>
                                        <SelectItem value="published">Published</SelectItem>
                                    </SelectContent>
                                </Select>
                            </div>
                            <div className="space-y-1.5">
                                <Label>Publish Date</Label>
                                <DatePicker value={data.published_at} onChange={(v) => setData('published_at', v)} />
                            </div>
                        </div>

                        <div className="rounded-xl border border-border bg-card p-6 space-y-4">
                            <h2 className="font-semibold">Featured Image</h2>
                            <ImageUpload
                                key={imageKey}
                                currentUrl={post.featured_image}
                                onChange={(file) => { setData('featured_image', file); setData('featured_image_clear', false); }}
                                onClear={() => { setData('featured_image', null); setData('featured_image_clear', true); setImageKey((k) => k + 1); }}
                            />
                            {errors.featured_image && <p className="text-xs text-destructive">{errors.featured_image}</p>}
                        </div>
                    </div>
                </div>
            </form>

            <ConfirmDialog
                open={confirmDelete}
                onOpenChange={setConfirmDelete}
                title="Delete Post?"
                description="This is permanent and cannot be undone."
                confirmLabel="Delete"
                variant="danger"
                onConfirm={() => router.delete(`/admin/posts/${post.id}`, { onSuccess: () => setConfirmDelete(false) })}
            />
        </>
    );
}
