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, usePage } from '@inertiajs/react';
import { ArrowLeft, KeyRound, Lock, Shield, Users } from 'lucide-react';
import type { ReactNode } from 'react';

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

export default function View() {
    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 permissionsCount: number = initialData.permissions.length;
    const isActive = role?.status === 1;

    const infoItems = [
        {
            label: 'Role Type',
            value: role?.type_label ?? '—',
            icon: Shield,
            iconClass: 'text-blue-600',
            iconBg: 'border-blue-200',
        },
        {
            label: 'Access Level',
            value: role?.access_level_label ?? '—',
            icon: Lock,
            iconClass: 'text-purple-600',
            iconBg: 'border-purple-200',
        },
        {
            label: 'Permissions',
            value: String(permissionsCount),
            icon: KeyRound,
            iconClass: 'text-amber-600',
            iconBg: 'border-amber-200',
        },
        {
            label: 'Users Assigned',
            value: String(role?.users_count ?? 0),
            icon: Users,
            iconClass: 'text-green-600',
            iconBg: 'border-green-200',
        },
    ];

    return (
        <>
            <Head title={`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?.uid && (
                                <>
                                    <span>·</span>
                                    <span className="font-mono text-xs text-gray-400">{role.uid}</span>
                                </>
                            )}
                        </div>
                    </div>

                    {role?.can_edit === 1 && (
                        <Button
                            size="sm"
                            asChild
                            className="mt-1 shrink-0 bg-blue-600 hover:bg-blue-700"
                        >
                            <Link href={route('roles.edit', role?.uid)}>
                                Edit Role
                            </Link>
                        </Button>
                    )}
                </div>

                {/* Role information section */}
                <div className="mb-4 rounded-lg border border-input p-5">
                    <div className="mb-5 flex items-center gap-3">
                        <div className="flex h-10 w-10 items-center justify-center rounded-xl border border-input">
                            <Shield className="h-5 w-5" />
                        </div>
                        <div>
                            <h3 className="text-lg font-semibold">Role Information</h3>
                            <p className="text-sm text-gray-600">Configuration and access settings</p>
                        </div>
                    </div>

                    <div className="grid grid-cols-2 gap-4 md:grid-cols-4">
                        {infoItems.map((item) => (
                            <div key={item.label} className="flex items-center gap-3 rounded-lg border border-input p-3">
                                <div className={`flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border ${item.iconBg}`}>
                                    <item.icon className={`h-4 w-4 ${item.iconClass}`} />
                                </div>
                                <div className="min-w-0">
                                    <p className="text-xs text-gray-500">{item.label}</p>
                                    <p className="truncate text-sm font-semibold">{item.value}</p>
                                </div>
                            </div>
                        ))}
                    </div>
                </div>

                {/* Permissions & scope section */}
                <div className="rounded-lg border border-input p-5">
                    <div className="mb-5 flex items-center gap-3">
                        <div className="flex h-10 w-10 items-center justify-center rounded-xl border border-input">
                            <KeyRound className="h-5 w-5" />
                        </div>
                        <div>
                            <h3 className="text-lg font-semibold">Permissions &amp; Scope</h3>
                            <p className="text-sm text-gray-600">{permissionsCount} permission{permissionsCount !== 1 ? 's' : ''} assigned</p>
                        </div>
                    </div>

                    <RoleForm
                        modulePermissions={modulePermissions as any}
                        initialData={initialData}
                        onSubmit={() => {}}
                        submitButtonText=""
                        isEdit={true}
                        isView={true}
                    />
                </div>

            </div>
        </>
    );
}

View.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 ?? 'View Role', href: '#' },
            ]}
            title="Role Details"
        >
            {page}
        </AppLayout>
    );
};
