"use client";

import Link from "next/link";
import { useParams } from "next/navigation";
import { Printer } from "lucide-react";
import { formatDateShort } from "@/lib/utils";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { SimpleCrud, type CrudColumn, type CrudField } from "@/components/admin/simple-crud";
import { BumindesPendudukInduk } from "@/components/admin/bumindes-penduduk-induk";

const UMUM_FIELDS: CrudField[] = [
  { name: "judul", label: "Judul", required: true, full: true },
  {
    name: "jenis",
    label: "Jenis Peraturan",
    type: "select",
    options: [
      { value: "Perdes", label: "Peraturan Desa" },
      { value: "Perkades", label: "Peraturan Kepala Desa" },
      { value: "SK", label: "Surat Keputusan" },
    ],
    defaultValue: "Perdes",
    required: true,
  },
  { name: "nomor", label: "Nomor", required: true },
  { name: "tanggal", label: "Tanggal Ditetapkan", type: "date", required: true },
  { name: "tahun", label: "Tahun", type: "number", required: true },
  { name: "uraianSingkat", label: "Uraian Singkat", type: "textarea" },
  { name: "tentang", label: "Tentang", full: true },
  {
    name: "status",
    label: "Status",
    type: "select",
    options: [
      { value: "Berlaku", label: "Berlaku" },
      { value: "Dicabut", label: "Dicabut" },
    ],
    defaultValue: "Berlaku",
  },
  { name: "aktif", label: "Aktif", type: "checkbox", defaultValue: true },
  { name: "dimuatPada", label: "Dimuat Pada", type: "date" },
  { name: "keterangan", label: "Keterangan", type: "textarea" },
];

const UMUM_COLUMNS: CrudColumn[] = [
  { name: "judul", label: "Judul" },
  { name: "jenis", label: "Jenis Peraturan" },
  {
    name: "nomor",
    label: "No./Tgl Ditetapkan",
    render: (row) =>
      `${String(row.nomor ?? "-")} / ${
        row.tanggal ? formatDateShort(String(row.tanggal)) : "-"
      }`,
  },
  { name: "uraianSingkat", label: "Uraian Singkat", hideOnMobile: true },
  {
    name: "aktif",
    label: "Aktif",
    render: (row) => (
      <Badge variant={row.aktif ? "success" : "secondary"}>
        {row.aktif ? "Ya" : "Tidak"}
      </Badge>
    ),
  },
  { name: "dimuatPada", label: "Dimuat Pada", hideOnMobile: true },
];

const PEMBANGUNAN_FIELDS: CrudField[] = [
  { name: "nama", label: "Nama Proyek / Kegiatan", required: true, full: true },
  { name: "lokasi", label: "Lokasi" },
  { name: "sumberDana", label: "Sumber Dana" },
  { name: "anggaran", label: "Jumlah", type: "number" },
  { name: "tahun", label: "Tahun", type: "number" },
  { name: "pelaksana", label: "Pelaksana" },
  { name: "volume", label: "Volume" },
  { name: "persentase", label: "Persentase (%)", type: "number" },
  { name: "manfaat", label: "Manfaat", type: "textarea" },
  { name: "danaPemerintah", label: "Dana Pemerintah", type: "number" },
  { name: "danaProvinsi", label: "Dana Provinsi", type: "number" },
  { name: "danaKabKota", label: "Dana Kab/Kota", type: "number" },
  { name: "danaSwadaya", label: "Dana Swadaya", type: "number" },
  { name: "mulai", label: "Mulai", type: "date" },
  { name: "selesai", label: "Selesai", type: "date" },
  {
    name: "status",
    label: "Status",
    type: "select",
    options: [
      { value: "Direncanakan", label: "Direncanakan" },
      { value: "Berjalan", label: "Berjalan" },
      { value: "Selesai", label: "Selesai" },
    ],
    defaultValue: "Direncanakan",
  },
  { name: "gambar", label: "URL Gambar", type: "url" },
  { name: "keterangan", label: "Ket", type: "textarea" },
];

const PEMBANGUNAN_COLUMNS: CrudColumn[] = [
  { name: "nama", label: "Nama Proyek / Kegiatan" },
  { name: "lokasi", label: "Lokasi", hideOnMobile: true },
  { name: "sumberDana", label: "Sumber Dana", hideOnMobile: true },
  { name: "anggaran", label: "Jumlah" },
  {
    name: "persentase",
    label: "Persentase",
    render: (row) => (row.persentase != null ? `${row.persentase}%` : "-"),
  },
  { name: "volume", label: "Volume", hideOnMobile: true },
  { name: "tahun", label: "Tahun", hideOnMobile: true },
  { name: "pelaksana", label: "Pelaksana", hideOnMobile: true },
  { name: "manfaat", label: "Manfaat", hideOnMobile: true },
  { name: "keterangan", label: "Ket", hideOnMobile: true },
  { name: "danaPemerintah", label: "Pemerintah", hideOnMobile: true },
  { name: "danaProvinsi", label: "Provinsi", hideOnMobile: true },
  { name: "danaKabKota", label: "Kab/Kota", hideOnMobile: true },
  { name: "danaSwadaya", label: "Swadaya", hideOnMobile: true },
];

const ARSIP_FIELDS: CrudField[] = [
  {
    name: "jenis",
    label: "Jenis Dokumen",
    type: "select",
    options: [
      { value: "Umum", label: "Umum" },
      { value: "Penduduk", label: "Penduduk" },
      { value: "Pembangunan", label: "Pembangunan" },
      { value: "Keuangan", label: "Keuangan" },
      {
        value: "SURAT KEPUTUSAN KEPALA DESA",
        label: "Surat Keputusan Kepala Desa",
      },
      { value: "PERATURAN DESA", label: "Peraturan Desa" },
      { value: "INFORMASI DESA LAIN", label: "Informasi Desa Lain" },
    ],
    defaultValue: "Umum",
  },
  { name: "nomor", label: "Nomor Dokumen", required: true },
  { name: "tanggal", label: "Tanggal Dokumen", type: "date", required: true },
  { name: "judul", label: "Nama Dokumen", required: true, full: true },
  { name: "tahun", label: "Tahun", type: "number", required: true },
  { name: "lokasi", label: "Lokasi Arsip" },
  { name: "keterangan", label: "Keterangan", type: "textarea" },
];

const ARSIP_COLUMNS: CrudColumn[] = [
  { name: "nomor", label: "Nomor Dokumen" },
  { name: "tanggal", label: "Tanggal Dokumen" },
  { name: "judul", label: "Nama Dokumen" },
  { name: "jenis", label: "Jenis Dokumen" },
  { name: "lokasi", label: "Lokasi Arsip", hideOnMobile: true },
];

export default function BumindesPage() {
  const params = useParams<{ slug: string }>();
  const slug = params.slug;

  if (slug === "umum") {
    return (
      <SimpleCrud
        title="Administrasi Umum"
        description="Buku peraturan desa, peraturan kepala desa, dan surat keputusan."
        entity="peraturan-desa"
        fields={UMUM_FIELDS}
        columns={UMUM_COLUMNS}
        searchPlaceholder="Cari nomor atau tentang…"
        createLabel="Tambah Peraturan"
      />
    );
  }

  if (slug === "penduduk") {
    return <BumindesPendudukInduk />;
  }

  if (slug === "pembangunan") {
    return (
      <SimpleCrud
        title="Administrasi Pembangunan"
        description="Buku rencana dan realisasi pembangunan desa."
        entity="pembangunan"
        fields={PEMBANGUNAN_FIELDS}
        columns={PEMBANGUNAN_COLUMNS}
        searchPlaceholder="Cari kegiatan atau lokasi…"
        createLabel="Tambah Kegiatan"
        headerExtra={
          <Link href="/admin/pembangunan">
            <Button variant="outline" size="sm">
              <Printer className="h-4 w-4" /> Data Pembangunan
            </Button>
          </Link>
        }
      />
    );
  }

  return (
    <SimpleCrud
      title="Arsip Desa"
      description="Daftar arsip desa yang tersimpan beserta lokasi penyimpanannya."
      entity="arsip-desa"
      fields={ARSIP_FIELDS}
      columns={ARSIP_COLUMNS}
      searchPlaceholder="Cari nomor atau judul arsip…"
      createLabel="Tambah Arsip"
    />
  );
}
