import { Head, Link, router } from '@inertiajs/react';
import { Button } from '@/components/ui/button';
import type { Company, PaginatedData, User } from '@/types';

type AdminUser = User & {
    role: 'admin' | 'agent' | 'user';
    company_id: number | null;
    company?: Pick<Company, 'id' | 'name'> | null;
};

type Props = {
    users: PaginatedData<AdminUser>;
};

const roleBadgeClass: Record<AdminUser['role'], string> = {
    admin: 'border border-rose-800 bg-rose-950 text-rose-300',
    agent: 'border border-amber-800 bg-amber-950 text-amber-300',
    user: 'border border-sky-800 bg-sky-950 text-sky-300',
};

export default function UsersIndex({ users }: Props) {
    function handleDelete(user: AdminUser) {
        const confirmed = window.confirm(
            `Delete user ${user.name} (${user.email})? This action cannot be undone.`,
        );

        if (!confirmed) {
            return;
        }

        router.delete(`/admin/users/${user.id}`);
    }

    return (
        <>
            <Head title="Users" />
            <div className="space-y-4 p-4">
                <div className="flex items-center justify-between">
                    <h1 className="text-2xl font-bold">Users</h1>
                    <Button asChild>
                        <Link href="/admin/users/create">Add User</Link>
                    </Button>
                </div>

                <div className="overflow-hidden rounded-lg border">
                    <table className="w-full text-sm">
                        <thead className="bg-muted/50">
                            <tr>
                                <th className="p-3 text-left font-medium">Name</th>
                                <th className="p-3 text-left font-medium">Email</th>
                                <th className="p-3 text-left font-medium">Role</th>
                                <th className="p-3 text-left font-medium">Company</th>
                                <th className="p-3 text-left font-medium">Created</th>
                                <th className="p-3 text-left font-medium">Actions</th>
                            </tr>
                        </thead>
                        <tbody>
                            {users.data.map((user) => (
                                <tr key={user.id} className="border-t">
                                    <td className="p-3 font-medium">{user.name}</td>
                                    <td className="p-3">{user.email}</td>
                                    <td className="p-3">
                                        <span
                                            className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${roleBadgeClass[user.role]}`}
                                        >
                                            {user.role}
                                        </span>
                                    </td>
                                    <td className="p-3">{user.company?.name ?? '—'}</td>
                                    <td className="p-3">
                                        {new Date(user.created_at).toLocaleDateString()}
                                    </td>
                                    <td className="p-3">
                                        <div className="flex items-center gap-2">
                                            <Button variant="outline" size="sm" asChild>
                                                <Link href={`/admin/users/${user.id}/edit`}>
                                                    Edit
                                                </Link>
                                            </Button>
                                            <Button
                                                variant="destructive"
                                                size="sm"
                                                onClick={() => handleDelete(user)}
                                            >
                                                Delete
                                            </Button>
                                        </div>
                                    </td>
                                </tr>
                            ))}
                            {users.data.length === 0 && (
                                <tr>
                                    <td
                                        colSpan={6}
                                        className="p-6 text-center text-muted-foreground"
                                    >
                                        No users found. Add your first user to get started.
                                    </td>
                                </tr>
                            )}
                        </tbody>
                    </table>
                </div>

                {users.last_page > 1 && (
                    <div className="flex justify-center gap-2">
                        {users.prev_page_url && (
                            <Button variant="outline" size="sm" asChild>
                                <Link href={users.prev_page_url}>Previous</Link>
                            </Button>
                        )}
                        <span className="self-center text-sm">
                            Page {users.current_page} of {users.last_page}
                        </span>
                        {users.next_page_url && (
                            <Button variant="outline" size="sm" asChild>
                                <Link href={users.next_page_url}>Next</Link>
                            </Button>
                        )}
                    </div>
                )}
            </div>
        </>
    );
}
