import { Head, Link, router } from '@inertiajs/react';
import { Plus, Trash2 } from 'lucide-react';

import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import AdminLayout from '@/layouts/admin-layout';
import { type Role } from '@/types';

export default function AdminRolesIndex({ roles }: { roles: Role[] }) {
    const destroy = (id: number) => {
        if (!confirm('Delete this role?')) { return; }
        router.delete(`/admin/roles/${id}`);
    };

    return (
        <AdminLayout title="Roles">
            <Head title="Roles" />
            <div className="mb-4 flex items-center justify-between">
                <span className="text-sm text-slate-500">{roles.length} role{roles.length !== 1 ? 's' : ''}</span>
                <Button asChild className="bg-indigo-600 hover:bg-indigo-700">
                    <Link href="/admin/roles/create"><Plus size={15} className="mr-1" />New Role</Link>
                </Button>
            </div>

            <Card>
                <CardHeader><CardTitle className="text-base">All Roles</CardTitle></CardHeader>
                <CardContent className="p-0">
                    <table className="w-full text-sm">
                        <thead className="border-b bg-slate-50 text-xs uppercase text-slate-500">
                            <tr>
                                <th className="px-4 py-3 text-left">Name</th>
                                <th className="px-4 py-3 text-left">Permissions</th>
                                <th className="px-4 py-3 text-right">Actions</th>
                            </tr>
                        </thead>
                        <tbody className="divide-y">
                            {roles.map((role) => (
                                <tr key={role.id} className="hover:bg-slate-50">
                                    <td className="px-4 py-3">
                                        <span className="font-semibold text-slate-800">{role.name}</span>
                                    </td>
                                    <td className="px-4 py-3">
                                        {role.permissions && role.permissions.length > 0 ? (
                                            <div className="flex flex-wrap gap-1">
                                                {role.permissions.slice(0, 5).map((p) => (
                                                    <span key={p.id} className="rounded bg-indigo-100 px-1.5 py-0.5 text-xs text-indigo-700">{p.name}</span>
                                                ))}
                                                {role.permissions.length > 5 && (
                                                    <span className="rounded bg-slate-100 px-1.5 py-0.5 text-xs text-slate-500">+{role.permissions.length - 5} more</span>
                                                )}
                                            </div>
                                        ) : (
                                            <span className="text-xs text-slate-400">No permissions</span>
                                        )}
                                    </td>
                                    <td className="px-4 py-3 text-right">
                                        <div className="flex items-center justify-end gap-2">
                                            <Link href={`/admin/roles/${role.id}/edit`} className="text-xs text-indigo-600 hover:underline">Edit</Link>
                                            <button onClick={() => destroy(role.id)} className="text-red-400 hover:text-red-600 transition"><Trash2 size={14} /></button>
                                        </div>
                                    </td>
                                </tr>
                            ))}
                            {!roles.length && (
                                <tr><td colSpan={3} className="px-4 py-8 text-center text-slate-400">No roles found. Create one to get started.</td></tr>
                            )}
                        </tbody>
                    </table>
                </CardContent>
            </Card>
        </AdminLayout>
    );
}
