import { notFound } from "next/navigation";
import Link from "next/link";
import { eq } from "drizzle-orm";
import { db } from "@/db";
import {
  vehicleTemplates,
  vehicleTemplateMerkmale,
  vehicleTemplateAliasse,
  merkmale,
  merkmalOptionen,
} from "@/db/schema";
import { requirePlatformAdmin } from "@/lib/auth/guards";
import { de } from "@/lib/i18n/de";
import {
  TemplateMerkmaleEditor,
  type TemplateMerkmalRow,
  type MerkmalLite,
} from "./TemplateMerkmaleEditor";
import { AliasEditor, type AliasRow } from "./AliasEditor";

export default async function VorlageDetailPage({
  params,
}: {
  params: Promise<{ id: string }>;
}) {
  await requirePlatformAdmin();
  const { id } = await params;

  const [tpl] = await db
    .select()
    .from(vehicleTemplates)
    .where(eq(vehicleTemplates.id, id));
  if (!tpl) notFound();

  const [tmRows, aliasse, alleMerkmale, alleOptionen] = await Promise.all([
    db
      .select({
        merkmalId: vehicleTemplateMerkmale.merkmalId,
        name: merkmale.name,
        typ: merkmale.typ,
        einheit: merkmale.einheit,
        vorgabewertNum: vehicleTemplateMerkmale.vorgabewertNum,
        vorgabewertText: vehicleTemplateMerkmale.vorgabewertText,
        vorgabewertBool: vehicleTemplateMerkmale.vorgabewertBool,
        pflicht: vehicleTemplateMerkmale.pflicht,
      })
      .from(vehicleTemplateMerkmale)
      .innerJoin(merkmale, eq(merkmale.id, vehicleTemplateMerkmale.merkmalId))
      .where(eq(vehicleTemplateMerkmale.templateId, id))
      .orderBy(vehicleTemplateMerkmale.reihenfolge, merkmale.name),
    db
      .select()
      .from(vehicleTemplateAliasse)
      .where(eq(vehicleTemplateAliasse.templateId, id))
      .orderBy(vehicleTemplateAliasse.alias),
    db
      .select()
      .from(merkmale)
      .where(eq(merkmale.status, "active"))
      .orderBy(merkmale.name),
    db.select().from(merkmalOptionen),
  ]);

  const optByMerkmal = new Map<string, { wert: string; label: string }[]>();
  for (const o of alleOptionen) {
    const arr = optByMerkmal.get(o.merkmalId) ?? [];
    arr.push({ wert: o.wert, label: o.label });
    optByMerkmal.set(o.merkmalId, arr);
  }

  const rows: TemplateMerkmalRow[] = tmRows.map((r) => ({
    ...r,
    optionen: optByMerkmal.get(r.merkmalId) ?? [],
  }));
  const merkmaleLite: MerkmalLite[] = alleMerkmale.map((m) => ({
    id: m.id,
    name: m.name,
    typ: m.typ,
    einheit: m.einheit,
    optionen: optByMerkmal.get(m.id) ?? [],
  }));
  const aliasRows: AliasRow[] = aliasse.map((a) => ({
    id: a.id,
    alias: a.alias,
    bestaetigt: a.bestaetigt,
  }));

  return (
    <div className="space-y-8">
      <div>
        <Link
          href="/admin/vorlagen"
          className="text-sm text-navy hover:underline"
        >
          ← {de.admin.navVorlagen}
        </Link>
        <h1 className="mt-2 font-display text-2xl text-navy">
          {tpl.code} — {tpl.name}
        </h1>
      </div>

      <TemplateMerkmaleEditor
        templateId={id}
        rows={rows}
        alleMerkmale={merkmaleLite}
      />
      <AliasEditor templateId={id} code={tpl.code} aliasse={aliasRows} />
    </div>
  );
}
