import RoleForm from '@/components/all-forms/RoleForm';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import AppLayout from '@/layouts/app-layout';
import { Head, Link, router, usePage } from '@inertiajs/react';
import { ArrowLeft, Users } from 'lucide-react';
import type { ReactNode } from 'react';

declare const route: (...args: any[]) => string;

export default function Edit() {
    const { roleModuleScopes, role, modulePermissions } = usePage<any>().props;

    const initialData = {
        name:                 role?.name ?? '',
        slug:                 role?.slug ?? '',
        type:                 role?.type ?? 1,
        primary_access_level: role?.primary_access_level ?? 1,
        status:               role?.status ?? 1,
        permissions:          (role?.permissions ?? []).map((p: any) => (typeof p === 'string' ? p : p.slug)),
        moduleScopes:         roleModuleScopes ?? {},
    };

    const handleSubmit = (formData: any) => {
        router.put(route('roles.update', role?.uid), formData, {
            onError: (errors) => console.error('Validation errors:', errors),
        });
    };

    const isActive = role?.status === 1;

    return (
        <>
            <Head title={`Edit Role: ${role?.name}`} />
            <div className="no-scrollbar rounded-xl p-2 sm:p-4">

                {/* Page header */}
                <div className="mb-6 flex items-start gap-4">
                    <Button
                        variant="outline"
                        size="sm"
                        asChild
                        className="mt-1 shrink-0"
                    >
                        <Link href={route('roles.index')}>
                            <ArrowLeft className="h-4 w-4" />
                        </Link>
                    </Button>

                    <div className="min-w-0 flex-1">
                        <div className="flex flex-wrap items-center gap-2">
                            <h1 className="text-xl font-bold sm:text-2xl">{role?.name}</h1>
                            {role?.type_label && (
                                <span className={`inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium ${role?.type_badge}`}>
                                    {role.type_label}
                                </span>
                            )}
                            <Badge
                                variant="outline"
                                className={isActive
                                    ? 'border-green-300 bg-green-100 text-green-700'
                                    : 'border-red-300 bg-red-100 text-red-700'}
                            >
                                {role?.status_label}
                            </Badge>
                        </div>
                        <div className="mt-1 flex flex-wrap items-center gap-3 text-sm text-gray-500">
                            <span className="font-mono text-xs">{role?.slug}</span>
                            {role?.access_level_label && (
                                <>
                                    <span>·</span>
                                    <span>{role.access_level_label}</span>
                                </>
                            )}
                            {role?.users_count > 0 && (
                                <>
                                    <span>·</span>
                                    <span className="flex items-center gap-1">
                                        <Users className="h-3 w-3" />
                                        {role.users_count} user{role.users_count !== 1 ? 's' : ''}
                                    </span>
                                </>
                            )}
                        </div>
                    </div>

                    <Button
                        variant="outline"
                        size="sm"
                        asChild
                        className="mt-1 shrink-0"
                    >
                        <Link href={route('roles.show', role?.uid)}>
                            View Details
                        </Link>
                    </Button>
                </div>

                <RoleForm
                    modulePermissions={modulePermissions as any}
                    initialData={initialData}
                    onSubmit={handleSubmit}
                    submitButtonText="Update Role"
                    isEdit={true}
                    isView={false}
                />
            </div>
        </>
    );
}

Edit.layout = (page: ReactNode & { props: any }) => {
    const role = (page as any).props?.role;
    return (
        <AppLayout
            breadcrumbs={[
                { title: 'Home', href: '/' },
                { title: 'Roles', href: route('roles.index') },
                { title: role?.name ?? 'Edit', href: '#' },
            ]}
            title="Edit Role"
        >
            {page}
        </AppLayout>
    );
};
