import { saveExportMarketAction, toggleExportMarketAction } from "@/app/admin/actions";
import AdminFeedback from "@/components/admin/AdminFeedback";
import { CheckField, FormCard, SubmitButton, TextField } from "@/components/admin/AdminFormFields";
import AdminShell from "@/components/admin/AdminShell";
import { requireAdminPermission } from "@/lib/auth";
import { prisma } from "@/lib/db";
import { MapPin, Plus } from "lucide-react";
import Link from "next/link";
import { hasAdminPermission } from "@/lib/admin-permissions";

export const revalidate = 0;

export default async function AdminMarketsPage({ searchParams }: { searchParams: Promise<Record<string, string | string[] | undefined>> }) {
  const session = await requireAdminPermission("markets", "view");
  const query = await searchParams;
  const editId = typeof query.edit === "string" ? query.edit : null;
  const markets = await prisma.exportMarket.findMany({ orderBy: [{ order: "asc" }, { nameTr: "asc" }] });
  const selected = editId ? markets.find((market) => market.id === editId) : null;
  const canCreate = hasAdminPermission(session, "markets", "create");
  const canEdit = hasAdminPermission(session, "markets", "edit");
  const canPublish = hasAdminPermission(session, "markets", "publish");
  const canManageForm = selected ? canEdit : canCreate;

  return (
    <AdminShell
      eyebrow="Küresel erişim"
      title="İhracat ülkeleri"
      description="Hedef ihracat pazarlarını, temsili başkent koordinatlarını, sıralamayı ve üç dildeki ülke adlarını yönetin. Başkent işaretleri bayi veya gerçekleşmiş sevkiyat adresi değildir. Fabrika çıkış noktası sabit Norden konumudur."
      actions={canCreate ? <Link href="/admin/markets?new=1" className="inline-flex items-center gap-2 rounded-full bg-ember px-5 py-3 text-[10px] font-semibold uppercase tracking-[0.15em] text-surface-0"><Plus size={14} /> Yeni ülke</Link> : undefined}
    >
      <AdminFeedback saved={typeof query.saved === "string" ? query.saved : undefined} error={typeof query.error === "string" ? query.error : undefined} />
      <div className="grid gap-6 xl:grid-cols-[360px_minmax(0,1fr)]">
        <div className="space-y-3">
          <div className="rounded-2xl border border-ember/25 bg-ember/[0.06] p-4 text-xs leading-5 text-fg-secondary">
            <strong className="block text-fg-primary">Fabrika çıkış noktası</strong>
            Deliklikaya, Arnavutköy · 41.1272357, 28.6638482
          </div>
          {markets.map((market) => (
            <Link key={market.id} href={`/admin/markets?edit=${market.id}`} className={`flex items-center gap-4 rounded-2xl border p-4 transition ${selected?.id === market.id ? "border-ember/50 bg-ember/[0.07]" : "border-border bg-surface-1/50 hover:border-border-strong"}`}>
              <span className="grid h-10 w-10 shrink-0 place-items-center rounded-full border border-border text-xs font-semibold text-ember">{market.code}</span>
              <div className="min-w-0 flex-1"><p className="font-medium">{market.nameTr}</p><p className="mt-1 truncate text-xs text-fg-muted">{market.capitalTr} · {market.latitude}, {market.longitude}</p></div>
              <span className={`h-2 w-2 rounded-full ${market.enabled ? "bg-emerald-400" : "bg-fg-muted"}`} />
            </Link>
          ))}
        </div>

        <FormCard title={selected ? `${selected.nameTr} kaydını düzenle` : "Yeni ihracat pazarı"} subtitle="Okun vardığı konum başkent koordinatıdır. Koordinatı doğrulamadan yayına almayın.">
          {!canManageForm ? <div className="mb-5 rounded-2xl border border-border bg-white/[0.025] p-4 text-sm text-fg-secondary">Bu ülke kaydı için yalnız görüntüleme yetkiniz bulunuyor.</div> : null}
          <form action={saveExportMarketAction} className="space-y-7">
            {selected ? <input type="hidden" name="id" value={selected.id} /> : null}
            <div className="grid gap-4 md:grid-cols-4">
              <TextField label="ISO ülke kodu" name="code" defaultValue={selected?.code} required placeholder="DE" />
              <TextField label="Gösterim sırası" name="order" type="number" min={0} max={999} defaultValue={selected?.order ?? markets.length + 1} />
              <TextField label="Enlem" name="latitude" type="number" step="0.000001" min={-90} max={90} defaultValue={selected?.latitude} required />
              <TextField label="Boylam" name="longitude" type="number" step="0.000001" min={-180} max={180} defaultValue={selected?.longitude} required />
            </div>

            <div className="grid gap-5 lg:grid-cols-3">
              {(["Tr", "En", "Ru"] as const).map((locale) => (
                <div key={locale} className="space-y-4 rounded-2xl border border-border bg-surface-0/45 p-4">
                  <p className="text-[10px] font-semibold uppercase tracking-[0.18em] text-ember">{locale === "Tr" ? "Türkçe" : locale === "En" ? "English" : "Русский"}</p>
                  <TextField label="Ülke adı" name={`name${locale}`} defaultValue={selected?.[`name${locale}`]} required />
                  <TextField label="Başkent" name={`capital${locale}`} defaultValue={selected?.[`capital${locale}`]} required />
                </div>
              ))}
            </div>

            {canPublish ? <CheckField label="Haritada göster" name="enabled" defaultChecked={selected?.enabled ?? true} description="Kapatıldığında kayıt silinmez; yalnızca halka açık ihracat ağından gizlenir." /> : <>{selected?.enabled ? <input type="hidden" name="enabled" value="on" /> : null}<p className="text-xs text-fg-muted">Harita görünürlüğünü değiştirme yetkiniz yok.</p></>}
            <div className="flex flex-wrap items-center justify-between gap-3 border-t border-border pt-6">
              {canManageForm ? <SubmitButton>{selected ? "Ülkeyi güncelle" : "Ülkeyi ekle"}</SubmitButton> : <span />}
              {selected ? <a href={`https://www.google.com/maps?q=${selected.latitude},${selected.longitude}`} target="_blank" rel="noreferrer" className="inline-flex items-center gap-2 text-xs text-fg-secondary"><MapPin size={14} /> Koordinatı haritada doğrula</a> : null}
            </div>
          </form>
          {selected && canPublish ? <form action={toggleExportMarketAction} className="mt-4 border-t border-border pt-4"><input type="hidden" name="id" value={selected.id} /><button type="submit" className="text-xs text-ember">{selected.enabled ? "Haritadan geçici olarak gizle" : "Haritada tekrar göster"}</button></form> : null}
        </FormCard>
      </div>
    </AdminShell>
  );
}
