import {prisma} from "@/lib/db/prisma";
import Link from "next/link";
import {DataTable, DataTableColumn, DataTableFilter} from "@/components/data-table/data-table";

type TenantRow = {
  id: string;
  name: string;
  slug: string;
  email: string;
  status: string;
  country: string;
  currency: string;
  createdAt: string;
};

const statusColors: Record<string, string> = {
  ACTIVE: "bg-green-100 text-green-700",
  TRIAL: "bg-blue-100 text-blue-700",
  SUSPENDED: "bg-red-100 text-red-700",
  CANCELLED: "bg-gray-100 text-gray-500"
};

export default async function TenantsPage() {
  const tenants = await prisma.tenant.findMany({
    orderBy: {createdAt: "desc"}
  });

  const rows: TenantRow[] = tenants.map((t) => ({
    id: t.id,
    name: t.name,
    slug: t.slug,
    email: t.email,
    status: t.status,
    country: t.country ?? "—",
    currency: t.currency,
    createdAt: new Date(t.createdAt).toLocaleDateString()
  }));

  const columns: DataTableColumn<TenantRow>[] = [
    {
      key: "name",
      header: "Company",
      accessor: (r) => r.name,
      sortable: true,
      cell: (r) => (
        <Link href={`/super-admin/tenants/${r.id}`} className="font-semibold text-blue-600 hover:underline">
          {r.name}
        </Link>
      )
    },
    {key: "slug", header: "Slug", accessor: (r) => r.slug, cell: (r) => <span className="font-mono text-xs text-slate-500">{r.slug}</span>},
    {key: "email", header: "Email", accessor: (r) => r.email},
    {key: "country", header: "Country", accessor: (r) => r.country},
    {key: "currency", header: "Currency", accessor: (r) => r.currency},
    {
      key: "status",
      header: "Status",
      accessor: (r) => r.status,
      cell: (r) => (
        <span className={`rounded-full px-2 py-0.5 text-xs font-medium ${statusColors[r.status] ?? "bg-slate-100"}`}>
          {r.status}
        </span>
      )
    },
    {key: "createdAt", header: "Created", accessor: (r) => r.createdAt, sortable: true},
    {
      key: "actions",
      header: "Actions",
      accessor: () => "",
      cell: (r) => (
        <Link href={`/super-admin/tenants/${r.id}`}>
          <button className="rounded-lg border border-slate-200 px-2.5 py-1 text-xs font-medium text-slate-700 hover:bg-slate-50 transition">
            Manage
          </button>
        </Link>
      )
    }
  ];

  const filters: DataTableFilter<TenantRow>[] = [
    {
      key: "status",
      label: "Status",
      options: ["ACTIVE", "TRIAL", "SUSPENDED", "CANCELLED"].map((s) => ({label: s, value: s})),
      getValue: (r) => r.status
    }
  ];

  return (
    <div className="space-y-6 p-6">
      <div className="flex items-center justify-between">
        <div>
          <h1 className="text-2xl font-bold text-slate-900">Tenants</h1>
          <p className="mt-1 text-slate-500">{tenants.length} registered companies</p>
        </div>
        <Link
          href="/super-admin/tenants/new"
          className="rounded-lg bg-violet-600 px-4 py-2 text-sm font-medium text-white hover:bg-violet-700 transition"
        >
          + New Tenant
        </Link>
      </div>
      <DataTable
        data={rows}
        columns={columns}
        filters={filters}
        searchPlaceholder="Search tenants..."
        emptyMessage="No tenants found."
      />
    </div>
  );
}
