import { Head, Link, router } from '@inertiajs/react';
import { Plus, Trash2 } from 'lucide-react';
import { useState } from 'react';
import { ConfirmDialog } from '@/components/admin/confirm-dialog';
import { DataTable, type Column } from '@/components/admin/data-table';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';

interface Post {
    id: number;
    title: string;
    status: string;
    user_id: number;
    published_at: string | null;
    created_at: string;
}

interface Props {
    posts: { data: Post[]; meta: any; links: any[] };
    filters: { search?: string; status?: string };
}

export default function PostsIndex({ posts, filters }: Props) {
    const [selectedIds, setSelectedIds] = useState<number[]>([]);
    const [confirmBulkOpen, setConfirmBulkOpen] = useState(false);
    const [confirmDeleteId, setConfirmDeleteId] = useState<number | null>(null);

    const columns: Column<Post>[] = [
        {
            key: 'title', label: 'Title', sortable: true,
            render: (p) => <p className="font-medium line-clamp-1 max-w-xs">{p.title}</p>,
        },
        {
            key: 'status', label: 'Status',
            render: (p) => <Badge variant={p.status === 'published' ? 'default' : 'secondary'}>{p.status}</Badge>,
        },
        {
            key: 'published_at', label: 'Published', className: 'hidden md:table-cell',
            render: (p) => <span className="text-sm text-muted-foreground">{p.published_at ? new Date(p.published_at).toLocaleDateString('en-GB') : '—'}</span>,
        },
        {
            key: 'actions', label: '', className: 'w-20 text-right',
            render: (p) => (
                <div className="flex justify-end gap-1">
                    <Button variant="ghost" size="sm" asChild><Link href={`/admin/posts/${p.id}/edit`}>Edit</Link></Button>
                    <Button variant="ghost" size="icon" className="h-8 w-8 text-destructive hover:text-destructive" onClick={() => setConfirmDeleteId(p.id)}><Trash2 className="h-4 w-4" /></Button>
                </div>
            ),
        },
    ];

    return (
        <>
            <Head title="News & Posts" />
            <div className="space-y-6">
                <div className="flex items-center justify-between">
                    <div><h1 className="text-2xl font-bold">News</h1><p className="mt-1 text-sm text-muted-foreground">{posts.meta.total} posts</p></div>
                    <Button asChild><Link href="/admin/posts/create"><Plus className="mr-2 h-4 w-4" /> New Post</Link></Button>
                </div>
                <DataTable data={posts.data} columns={columns} meta={posts.meta} links={posts.links} searchable searchPlaceholder="Search posts..."
                    selectedIds={selectedIds} onSelectionChange={(ids) => setSelectedIds(ids as number[])}
                    bulkActions={<Button variant="destructive" size="sm" onClick={() => setConfirmBulkOpen(true)}><Trash2 className="mr-2 h-4 w-4" />Delete {selectedIds.length}</Button>}
                    empty="No posts found." />
            </div>
            <ConfirmDialog open={confirmBulkOpen} onOpenChange={setConfirmBulkOpen} title={`Delete ${selectedIds.length} post(s)?`} description="This is permanent." confirmLabel="Delete" variant="danger"
                onConfirm={() => router.post('/admin/posts/bulk-destroy', { ids: selectedIds }, { onSuccess: () => { setSelectedIds([]); setConfirmBulkOpen(false); } })} />
            <ConfirmDialog open={confirmDeleteId !== null} onOpenChange={(open) => !open && setConfirmDeleteId(null)} title="Delete post?" description="This is permanent." confirmLabel="Delete" variant="danger"
                onConfirm={() => confirmDeleteId !== null && router.delete(`/admin/posts/${confirmDeleteId}`, { onSuccess: () => setConfirmDeleteId(null) })} />
        </>
    );
}
