import Link from "next/link";
import { History, Plus } from "lucide-react";
import { Button } from "@/components/ui/button";
import { can } from "@/lib/permissions";
import { requireUser } from "@/lib/session";
import { BitacoraDashboard } from "@/components/bitacora/bitacora-dashboard";
import { BitacoraFilters } from "@/components/bitacora/bitacora-filters";
import { BitacoraPagination } from "@/components/bitacora/bitacora-pagination";
import { BitacoraTable } from "@/components/bitacora/bitacora-table";
import { BitacoraTimeline } from "@/components/bitacora/bitacora-timeline";
import { getBitacoraDashboardStats, getBitacoraHitos, getBitacoraTimeline, type BitacoraSearchParams } from "@/server/queries/bitacora";

export const dynamic = "force-dynamic";

export default async function BitacoraPage({
  searchParams,
}: {
  searchParams: Promise<Record<string, string | undefined>>;
}) {
  const params = await searchParams;
  const user = await requireUser();
  if (!can(user.role, "bitacora:read")) {
    return <div className="rounded-lg border border-border bg-card p-6 text-sm text-muted-foreground">No tienes permisos para ver la bitácora.</div>;
  }

  const filters = params as BitacoraSearchParams;
  const [stats, listResult, timelineItems] = await Promise.all([
    getBitacoraDashboardStats(filters),
    getBitacoraHitos(filters),
    params.view === "timeline" ? getBitacoraTimeline(filters) : Promise.resolve([]),
  ]);

  return (
    <div className="space-y-6">
      <div className="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
        <div className="space-y-1">
          <div className="inline-flex items-center gap-2 rounded-full border border-border bg-card px-3 py-1 text-xs font-medium text-muted-foreground shadow-sm">
            <History className="h-3.5 w-3.5" />
            Bitácora Territorial
          </div>
          <h2 className="text-2xl font-semibold tracking-tight">Bitácora Territorial</h2>
          <p className="max-w-3xl text-sm text-muted-foreground">
            Línea de tiempo institucional del proceso territorial con hitos, archivos, comentarios y seguimiento.
          </p>
        </div>
        {can(user.role, "bitacora:manage") ? (
          <Button asChild>
            <Link href="/bitacora-territorial/nuevo">
              <Plus className="h-4 w-4" />
              Nuevo hito
            </Link>
          </Button>
        ) : null}
      </div>

      <BitacoraDashboard stats={stats} />
      <BitacoraFilters q={params.q} categoria={params.categoria} estado={params.estado} prioridad={params.prioridad} anio={params.anio} view={params.view} />

      {params.view === "timeline" ? <BitacoraTimeline items={timelineItems} /> : <BitacoraTable items={listResult.items} />}

      {params.view !== "timeline" ? (
        <BitacoraPagination page={listResult.page} pageCount={listResult.pageCount} pageSize={listResult.pageSize} total={listResult.total} query={params} />
      ) : null}
    </div>
  );
}
