import { Head, Link, router } from "@inertiajs/react";
import { useState } from "react";
import AppLayout from "@/layouts/app-layout";
import {
    Card,
    CardContent,
    CardHeader,
    CardTitle,
    CardDescription,
} from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import { StatChip } from "@/components/crm/global-card";
import {
    Table,
    TableBody,
    TableCell,
    TableHead,
    TableHeader,
    TableRow,
} from "@/components/ui/table";
import {
    Building2,
    CheckCircle2,
    Clock,
    AlertTriangle,
    Search,
    Filter,
    ArrowRight,
    Users,
    UserCheck,
    Package,
    ChevronRight,
} from "lucide-react";

interface Company {
    id: number;
    nama: string;
    kode_perusahaan: string;
    email: string | null;
    status: "active" | "trial" | "suspended";
    subscription_status: "trial" | "active" | "past_due" | "cancelled";
    subscription_expires_at: string | null;
    subscription_plan?: {
        id: number;
        name: string;
        slug: string;
        monthly_price: number;
    } | null;
    users_count: number;
    customers_count: number;
    products_count: number;
}

interface Plan {
    id: number;
    name: string;
    slug: string;
    monthly_price: number;
}

interface Props {
    companies: {
        data: Company[];
        links: Array<{ url: string | null; label: string; active: boolean }>;
    };
    plans: Plan[];
    filters: { search: string; status: string };
    summary: {
        total: number;
        active: number;
        trial: number;
        suspended: number;
    };
}

const money = (value: number) =>
    new Intl.NumberFormat("id-ID", {
        style: "currency",
        currency: "IDR",
        maximumFractionDigits: 0,
    }).format(Number(value) || 0);

const getStatusBadge = (status: string) => {
    switch (status) {
        case "active":
            return (
                <Badge className="bg-emerald-50 text-emerald-600 dark:bg-emerald-950/50 dark:text-emerald-400 font-bold border-0 text-[10px]">
                    Active
                </Badge>
            );
        case "trial":
            return (
                <Badge className="bg-amber-50 text-amber-600 dark:bg-amber-950/50 dark:text-amber-400 font-bold border-0 text-[10px]">
                    Trial
                </Badge>
            );
        default:
            return (
                <Badge className="bg-rose-50 text-rose-600 dark:bg-rose-950/50 dark:text-rose-400 font-bold border-0 text-[10px]">
                    Suspended
                </Badge>
            );
    }
};

const getSubBadge = (status: string) => {
    return (
        <Badge
            variant="outline"
            className="text-[10px] font-semibold uppercase"
        >
            {status}
        </Badge>
    );
};

export default function Companies({
    companies,
    plans,
    filters,
    summary,
}: Props) {
    const [search, setSearch] = useState(filters.search ?? "");

    const submit = (event: React.FormEvent) => {
        event.preventDefault();
        router.get(
            "/platform/companies",
            { search, status: filters.status || undefined },
            { preserveState: true, replace: true },
        );
    };

    const filterStatus = (status: string) => {
        router.get(
            "/platform/companies",
            {
                search: filters.search || undefined,
                status: status || undefined,
            },
            { preserveState: true, replace: true },
        );
    };

    return (
        <AppLayout
            breadcrumbs={[{ title: "Perusahaan", href: "/platform/companies" }]}
        >
            <Head title="Manajemen Perusahaan" />
            <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-indigo-600 dark:text-indigo-400">
                                Tenant Management
                            </span>
                        </div>
                        <h1 className="text-2xl font-extrabold tracking-tight text-slate-900 dark:text-slate-50 sm:text-3xl mt-1">
                            Manajemen Perusahaan
                        </h1>
                        <p className="text-xs text-slate-500 dark:text-slate-400 mt-1">
                            Kelola seluruh tenant dan organisasi yang
                            menggunakan platform SaaS secara komprehensif.
                        </p>
                    </div>
                </div>

                {/* Metrics Grid using StatChip */}
                <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
                    <StatChip
                        icon={Building2}
                        label="Total"
                        value={summary.total}
                        tone="blue"
                        variant="compact"
                        description="Seluruh tenant terdaftar"
                    />
                    <StatChip
                        icon={CheckCircle2}
                        label="Aktif"
                        value={summary.active}
                        tone="emerald"
                        variant="compact"
                        description="Tenant dengan status aktif"
                    />
                    <StatChip
                        icon={Clock}
                        label="Trial"
                        value={summary.trial}
                        tone="violet"
                        variant="compact"
                        description="Masa percobaan aktif"
                    />
                    <StatChip
                        icon={AlertTriangle}
                        label="Suspended"
                        value={summary.suspended}
                        tone="rose"
                        variant="compact"
                        description="Tenant ditangguhkan"
                    />
                </div>

                {/* Filter and Search Bar */}
                <Card className="rounded-2xl border-slate-200/80 bg-white shadow-2xs dark:border-slate-800 dark:bg-slate-900">
                    <CardContent className="p-5 space-y-4">
                        <form
                            onSubmit={submit}
                            className="flex flex-col gap-3 md:flex-row"
                        >
                            <div className="relative flex-1">
                                <Search className="absolute left-3.5 top-1/2 -translate-y-1/2 size-4 text-slate-400" />
                                <Input
                                    value={search}
                                    onChange={(event) =>
                                        setSearch(event.target.value)
                                    }
                                    placeholder="Cari nama, kode, atau email perusahaan..."
                                    className="pl-10 rounded-xl border-slate-200 dark:border-slate-700 bg-slate-50/50 dark:bg-slate-800/50 text-xs"
                                />
                            </div>
                            <Button
                                type="submit"
                                className="rounded-xl bg-indigo-600 hover:bg-indigo-700 text-white font-semibold text-xs shadow-sm"
                            >
                                Cari Tenant
                            </Button>
                        </form>
                        <div className="flex flex-wrap items-center gap-2 pt-2 border-t border-slate-100 dark:border-slate-800">
                            <span className="text-xs font-semibold text-slate-400 mr-2 flex items-center gap-1.5">
                                <Filter className="size-3.5" /> Filter Status:
                            </span>
                            {[
                                ["", "Semua"],
                                ["active", "Aktif"],
                                ["trial", "Trial"],
                                ["suspended", "Suspended"],
                            ].map(([value, label]) => (
                                <Button
                                    key={value || "all"}
                                    type="button"
                                    variant={
                                        filters.status === value
                                            ? "default"
                                            : "outline"
                                    }
                                    size="sm"
                                    className={`rounded-xl text-xs font-semibold ${
                                        filters.status === value
                                            ? "bg-indigo-600 hover:bg-indigo-700 text-white border-0 shadow-sm"
                                            : "border-slate-200 dark:border-slate-700 hover:bg-slate-50 dark:hover:bg-slate-800"
                                    }`}
                                    onClick={() => filterStatus(value)}
                                >
                                    {label}
                                </Button>
                            ))}
                        </div>
                    </CardContent>
                </Card>

                {/* Companies Table Card */}
                <Card className="rounded-2xl border-slate-200/80 bg-white shadow-2xs dark:border-slate-800 dark:bg-slate-900">
                    <CardHeader className="pb-4">
                        <CardTitle className="text-base font-bold text-slate-900 dark:text-slate-100">
                            Daftar Tenant
                        </CardTitle>
                        <CardDescription className="text-xs">
                            Manajemen direktori lengkap seluruh perusahaan yang
                            terhubung
                        </CardDescription>
                    </CardHeader>
                    <CardContent className="px-0 pb-0">
                        <div className="overflow-x-auto">
                            <Table className="w-full text-xs">
                                <TableHeader className="border-y border-slate-100 bg-slate-50/50 text-slate-500 dark:border-slate-800 dark:bg-slate-800/50 dark:text-slate-400">
                                    <TableRow>
                                        <TableHead className="px-5 py-3 font-semibold">
                                            Perusahaan
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold">
                                            Paket
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold">
                                            Data Platform
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold text-center">
                                            Status
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold">
                                            Subscription
                                        </TableHead>
                                        <TableHead className="px-5 py-3 font-semibold text-right">
                                            Aksi
                                        </TableHead>
                                    </TableRow>
                                </TableHeader>
                                <TableBody className="divide-y divide-slate-100 dark:divide-slate-800">
                                    {companies.data.map((company) => (
                                        <TableRow
                                            key={company.id}
                                            className="transition hover:bg-slate-50/50 dark:hover:bg-slate-800/50"
                                        >
                                            <TableCell className="px-5 py-4">
                                                <div className="font-bold text-slate-900 dark:text-slate-100 text-sm">
                                                    {company.nama}
                                                </div>
                                                <div className="text-xs font-mono text-slate-400 mt-0.5 flex items-center gap-1.5">
                                                    <span>
                                                        {
                                                            company.kode_perusahaan
                                                        }
                                                    </span>
                                                    <span>·</span>
                                                    <span className="truncate max-w-45">
                                                        {company.email || "-"}
                                                    </span>
                                                </div>
                                            </TableCell>
                                            <TableCell className="px-5 py-4">
                                                <div className="font-medium text-slate-800 dark:text-slate-200">
                                                    {company.subscription_plan
                                                        ?.name || "-"}
                                                </div>
                                                <div className="text-xs text-indigo-600 dark:text-indigo-400 font-semibold mt-0.5">
                                                    {company.subscription_plan
                                                        ? money(
                                                              company
                                                                  .subscription_plan
                                                                  .monthly_price,
                                                          ) + "/bln"
                                                        : "-"}
                                                </div>
                                            </TableCell>
                                            <TableCell className="px-5 py-4 text-slate-600 dark:text-slate-300">
                                                <div className="flex items-center gap-3">
                                                    <span className="flex items-center gap-1">
                                                        <Users className="size-3 text-indigo-500" />{" "}
                                                        {company.users_count}
                                                    </span>
                                                    <span className="flex items-center gap-1">
                                                        <UserCheck className="size-3 text-emerald-500" />{" "}
                                                        {
                                                            company.customers_count
                                                        }
                                                    </span>
                                                    <span className="flex items-center gap-1">
                                                        <Package className="size-3 text-amber-500" />{" "}
                                                        {company.products_count}
                                                    </span>
                                                </div>
                                            </TableCell>
                                            <TableCell className="px-5 py-4 text-center">
                                                {getStatusBadge(company.status)}
                                            </TableCell>
                                            <TableCell className="px-5 py-4">
                                                <div className="flex items-center gap-2">
                                                    {getSubBadge(
                                                        company.subscription_status,
                                                    )}
                                                </div>
                                                <div className="text-[11px] text-slate-400 mt-1">
                                                    {company.subscription_expires_at
                                                        ? `Exp: ${company.subscription_expires_at}`
                                                        : "Tanpa tanggal"}
                                                </div>
                                            </TableCell>
                                            <TableCell className="px-5 py-4 text-right">
                                                <Button
                                                    asChild
                                                    variant="outline"
                                                    size="sm"
                                                    className="rounded-xl text-xs font-semibold hover:bg-indigo-50 hover:text-indigo-600 hover:border-indigo-200 transition"
                                                >
                                                    <Link
                                                        href={`/platform/companies/${company.id}`}
                                                        className="flex items-center gap-1"
                                                    >
                                                        Detail{" "}
                                                        <ChevronRight className="size-3" />
                                                    </Link>
                                                </Button>
                                            </TableCell>
                                        </TableRow>
                                    ))}
                                    {companies.data.length === 0 && (
                                        <TableRow>
                                            <TableCell
                                                colSpan={6}
                                                className="py-12 text-center text-slate-400"
                                            >
                                                Tidak ada perusahaan yang
                                                ditemukan.
                                            </TableCell>
                                        </TableRow>
                                    )}
                                </TableBody>
                            </Table>
                        </div>

                        {/* Pagination Links */}
                        {companies.links.length > 3 && (
                            <div className="p-4 border-t border-slate-100 dark:border-slate-800 flex flex-wrap gap-1.5 justify-center">
                                {companies.links.map((link, index) => (
                                    <Button
                                        key={`${link.label}-${index}`}
                                        variant={
                                            link.active ? "default" : "outline"
                                        }
                                        size="sm"
                                        disabled={!link.url}
                                        className={`rounded-xl text-xs ${
                                            link.active
                                                ? "bg-indigo-600 hover:bg-indigo-700 text-white font-bold border-0 shadow-sm"
                                                : "border-slate-200 dark:border-slate-700 text-slate-600 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-800"
                                        }`}
                                        onClick={() =>
                                            link.url &&
                                            router.get(
                                                link.url,
                                                {},
                                                { preserveState: true },
                                            )
                                        }
                                        dangerouslySetInnerHTML={{
                                            __html: link.label,
                                        }}
                                    />
                                ))}
                            </div>
                        )}
                    </CardContent>
                </Card>
            </div>
        </AppLayout>
    );
}
