import { Head } from "@inertiajs/react";
import AppLayout from "@/layouts/app-layout";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Badge } from "@/components/ui/badge";
import { StatChip } from "@/components/crm/global-card";
import { ShieldCheck, Lock, KeyRound, Layers } from "lucide-react";

type Props = {
    tenantPermissions: Record<string, Record<string, string>>;
    platformPermissions: Record<string, Record<string, string>>;
};

export default function PlatformPermissionsPage({
    tenantPermissions,
    platformPermissions,
}: Props) {
    const tenantTotal = Object.values(tenantPermissions).reduce(
        (sum, group) => sum + Object.keys(group).length,
        0,
    );
    const platformTotal = Object.values(platformPermissions).reduce(
        (sum, group) => sum + Object.keys(group).length,
        0,
    );
    const totalCombined = tenantTotal + platformTotal;

    return (
        <AppLayout
            breadcrumbs={[
                { title: "Permission Platform", href: "/platform/permissions" },
            ]}
        >
            <Head title="Permission Platform" />
            <div className="crm-page space-y-6 pb-10">
                {/* Header Section */}
                <div className="flex flex-col gap-4 md:flex-row md:items-center md:justify-between">
                    <div>
                        <div className="flex items-center gap-2">
                            <span className="flex h-2 w-2 rounded-full bg-emerald-500 animate-pulse" />
                            <span className="text-xs font-bold uppercase tracking-wider text-emerald-600 dark:text-emerald-400">
                                Security Catalog & RBAC Registry
                            </span>
                        </div>
                        <h1 className="text-2xl font-extrabold tracking-tight text-slate-900 dark:text-slate-50 sm:text-3xl mt-1">
                            Permission Platform
                        </h1>
                        <p className="text-xs text-slate-500 dark:text-slate-400 mt-1">
                            Katalog lengkap daftar permission yang menjadi
                            fondasi keamanan RBAC untuk platform sistem dan
                            perusahaan tenant.
                        </p>
                    </div>
                </div>

                {/* Metrics Grid using StatChip */}
                <div className="grid gap-4 sm:grid-cols-3">
                    <StatChip
                        icon={KeyRound}
                        label="Total Keseluruhan"
                        value={totalCombined}
                        tone="blue"
                        variant="compact"
                        description="Semua hak akses terdaftar"
                    />
                    <StatChip
                        icon={ShieldCheck}
                        label="Permission Platform"
                        value={platformTotal}
                        tone="violet"
                        variant="compact"
                        description="Otoritas tingkat sistem"
                    />
                    <StatChip
                        icon={Layers}
                        label="Permission Tenant"
                        value={tenantTotal}
                        tone="emerald"
                        variant="compact"
                        description="Hak akses operasional CRM"
                    />
                </div>

                {/* Platform Permissions Section */}
                <section className="space-y-4">
                    <div className="flex items-center gap-2 border-b border-slate-200 dark:border-slate-800 pb-3">
                        <ShieldCheck className="size-5 text-indigo-600 dark:text-indigo-400" />
                        <h2 className="text-lg font-bold text-slate-900 dark:text-slate-100">
                            Permission Platform
                        </h2>
                    </div>
                    <div className="grid gap-4 lg:grid-cols-2">
                        {Object.entries(platformPermissions).map(
                            ([group, permissions]) => (
                                <PermissionGroup
                                    key={group}
                                    title={group}
                                    permissions={permissions}
                                    badgeTone="indigo"
                                />
                            ),
                        )}
                    </div>
                </section>

                {/* Tenant Permissions Section */}
                <section className="space-y-4 pt-4">
                    <div className="flex items-center gap-2 border-b border-slate-200 dark:border-slate-800 pb-3">
                        <Lock className="size-5 text-emerald-600 dark:text-emerald-400" />
                        <h2 className="text-lg font-bold text-slate-900 dark:text-slate-100">
                            Permission Tenant / CRM
                        </h2>
                    </div>
                    <div className="grid gap-4 lg:grid-cols-2">
                        {Object.entries(tenantPermissions).map(
                            ([group, permissions]) => (
                                <PermissionGroup
                                    key={group}
                                    title={group}
                                    permissions={permissions}
                                    badgeTone="emerald"
                                />
                            ),
                        )}
                    </div>
                </section>
            </div>
        </AppLayout>
    );
}

function PermissionGroup({
    title,
    permissions,
    badgeTone,
}: {
    title: string;
    permissions: Record<string, string>;
    badgeTone: "indigo" | "emerald";
}) {
    const badgeClasses =
        badgeTone === "indigo"
            ? "bg-indigo-50 text-indigo-700 dark:bg-indigo-950/50 dark:text-indigo-300 border-0 text-[10px] font-bold"
            : "bg-emerald-50 text-emerald-700 dark:bg-emerald-950/50 dark:text-emerald-300 border-0 text-[10px] font-bold";

    return (
        <Card className="rounded-2xl border-slate-200/80 bg-white shadow-2xs dark:border-slate-800 dark:bg-slate-900 overflow-hidden flex flex-col">
            <CardHeader className="border-b border-slate-200 dark:border-slate-800 pb-3! bg-slate-50/50 dark:bg-slate-800/50">
                <CardTitle className="capitalize text-sm font-bold text-slate-900 dark:text-slate-100 tracking-wide">
                    {title.replace(/_/g, " ")}
                </CardTitle>
            </CardHeader>
            <CardContent className="px-5 space-y-2.5 flex-1">
                {Object.entries(permissions).map(([key, label]) => (
                    <div
                        key={key}
                        className="flex items-center justify-between gap-3 rounded-xl border border-slate-200/80 bg-slate-50/30 p-3 dark:border-slate-800 dark:bg-slate-800/20 transition hover:bg-slate-50 dark:hover:bg-slate-800/50"
                    >
                        <div className="min-w-0 space-y-0.5">
                            <div className="text-xs font-bold text-slate-900 dark:text-slate-100 truncate">
                                {label}
                            </div>
                            <div className="text-[11px] font-mono text-slate-400 truncate">
                                {key}
                            </div>
                        </div>
                        <Badge className={badgeClasses}>Access</Badge>
                    </div>
                ))}
            </CardContent>
        </Card>
    );
}
