"use client";

import { useParams } from "next/navigation";
import { Check, X } from "lucide-react";
import { toast } from "sonner";
import { apiSend } from "@/lib/api";
import { SimpleCrud, type CrudColumn, type CrudField, type CrudRow } from "@/components/admin/simple-crud";
import { SettingsForm } from "@/components/admin/settings-form";

const PESAN_FIELDS: CrudField[] = [
  { name: "nama", label: "Nama Pengirim", required: true },
  { name: "nik", label: "NIK" },
  { name: "subjek", label: "Subjek" },
  { name: "pesan", label: "Pesan", type: "textarea", required: true },
  { name: "dibaca", label: "Sudah Dibaca", type: "checkbox" },
];

const PESAN_COLUMNS: CrudColumn[] = [
  { name: "nama", label: "Pengirim" },
  { name: "nik", label: "NIK" },
  { name: "subjek", label: "Subjek" },
  { name: "pesan", label: "Pesan" },
  { name: "dibaca", label: "Status Pesan" },
  { name: "waktu", label: "Dikirimkan Pada" },
];

const PENDAFTAR_FIELDS: CrudField[] = [
  { name: "nama", label: "Nama", required: true },
  { name: "nik", label: "NIK" },
  { name: "telepon", label: "Telepon" },
  { name: "alamat", label: "Alamat", full: true },
  { name: "loginTerakhir", label: "Login Terakhir", type: "date" },
  {
    name: "status",
    label: "Status",
    type: "select",
    options: [
      { value: "MENUNGGU", label: "Menunggu" },
      { value: "DISETUJUI", label: "Disetujui" },
      { value: "DITOLAK", label: "Ditolak" },
    ],
    defaultValue: "MENUNGGU",
  },
];

const PENDAFTAR_COLUMNS: CrudColumn[] = [
  { name: "nik", label: "NIK" },
  { name: "nama", label: "Nama Penduduk" },
  { name: "waktu", label: "Tanggal Buat", hideOnMobile: true },
  { name: "loginTerakhir", label: "Login Terakhir", hideOnMobile: true },
  { name: "status", label: "Status" },
];

const GAWAI_FIELDS: CrudField[] = [
  { name: "nama", label: "Nama Gawai", required: true },
  { name: "kode", label: "Kode / Token" },
  { name: "ipAddress", label: "IP Address" },
  { name: "macAddress", label: "MAC Address" },
  { name: "idPengunjung", label: "ID Pengunjung" },
  { name: "ipPrinter", label: "IP Address Printer & Port" },
  { name: "keyboardVirtual", label: "Virtual Keyboard", type: "checkbox" },
  { name: "keterangan", label: "Keterangan", full: true },
  { name: "aktif", label: "Aktif", type: "checkbox" },
];

const GAWAI_COLUMNS: CrudColumn[] = [
  { name: "ipAddress", label: "IP Address" },
  { name: "macAddress", label: "MAC Address" },
  { name: "idPengunjung", label: "ID Pengunjung" },
  { name: "ipPrinter", label: "IP Address Printer & Port" },
  { name: "keyboardVirtual", label: "Virtual Keyboard" },
  { name: "aktif", label: "Status" },
  { name: "keterangan", label: "Keterangan", hideOnMobile: true },
];

const PENDAPAT_FIELDS: CrudField[] = [
  { name: "judul", label: "Judul", required: true, full: true },
  { name: "pengguna", label: "Pengguna" },
  { name: "isi", label: "Isi Pendapat", type: "textarea", required: true },
  {
    name: "status",
    label: "Status",
    type: "select",
    options: [
      { value: "MENUNGGU", label: "Menunggu" },
      { value: "DITERIMA", label: "Diterima" },
      { value: "DITOLAK", label: "Ditolak" },
    ],
    defaultValue: "MENUNGGU",
  },
];

const PENDAPAT_COLUMNS: CrudColumn[] = [
  { name: "pengguna", label: "Pengguna" },
  { name: "waktu", label: "Tanggal" },
  { name: "isi", label: "Pendapat" },
  { name: "status", label: "Status" },
];

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

  if (slug === "pesan") {
    return (
      <SimpleCrud
        title="Kotak Pesan"
        description="Pesan yang dikirim warga melalui layanan mandiri."
        entity="pesan-mandiri"
        fields={PESAN_FIELDS}
        columns={PESAN_COLUMNS}
        searchPlaceholder="Cari pengirim atau subjek…"
        rowActions={(row: CrudRow, helpers) =>
          row.dibaca ? null : (
            <button
              type="button"
              title="Tandai dibaca"
              onClick={async () => {
                await apiSend(`/master/pesan-mandiri/${row.id}`, "PATCH", { dibaca: true });
                toast.success("Pesan ditandai dibaca");
                helpers.refresh();
              }}
              className="rounded-md p-1.5 text-emerald-600 hover:bg-emerald-50"
            >
              <Check className="h-4 w-4" />
            </button>
          )
        }
      />
    );
  }

  if (slug === "pendaftar") {
    return (
      <SimpleCrud
        title="Pendaftar Layanan Mandiri"
        description="Permohonan akun layanan mandiri dari warga."
        entity="pendaftar-mandiri"
        fields={PENDAFTAR_FIELDS}
        columns={PENDAFTAR_COLUMNS}
        searchPlaceholder="Cari nama atau NIK…"
        rowActions={(row: CrudRow, helpers) => (
          <>
            <button
              type="button"
              title="Setujui"
              onClick={async () => {
                await apiSend(`/master/pendaftar-mandiri/${row.id}`, "PATCH", { status: "DISETUJUI" });
                toast.success("Pendaftar disetujui");
                helpers.refresh();
              }}
              className="rounded-md p-1.5 text-emerald-600 hover:bg-emerald-50"
            >
              <Check className="h-4 w-4" />
            </button>
            <button
              type="button"
              title="Tolak"
              onClick={async () => {
                await apiSend(`/master/pendaftar-mandiri/${row.id}`, "PATCH", { status: "DITOLAK" });
                toast.success("Pendaftar ditolak");
                helpers.refresh();
              }}
              className="rounded-md p-1.5 text-red-600 hover:bg-red-50"
            >
              <X className="h-4 w-4" />
            </button>
          </>
        )}
      />
    );
  }

  if (slug === "gawai") {
    return (
      <SimpleCrud
        title="Gawai Layanan"
        description="Perangkat yang diizinkan mengakses layanan mandiri."
        entity="gawai-layanan"
        fields={GAWAI_FIELDS}
        columns={GAWAI_COLUMNS}
        searchPlaceholder="Cari gawai…"
        createLabel="Tambah Gawai"
      />
    );
  }

  if (slug === "pendapat") {
    return (
      <SimpleCrud
        title="Pendapat Warga"
        description="Usulan dan pendapat warga melalui layanan mandiri."
        entity="pendapat-warga"
        fields={PENDAPAT_FIELDS}
        columns={PENDAPAT_COLUMNS}
        searchPlaceholder="Cari pendapat…"
        rowActions={(row: CrudRow, helpers) => (
          <>
            <button
              type="button"
              title="Terima"
              onClick={async () => {
                await apiSend(`/master/pendapat-warga/${row.id}`, "PATCH", { status: "DITERIMA" });
                toast.success("Pendapat diterima");
                helpers.refresh();
              }}
              className="rounded-md p-1.5 text-emerald-600 hover:bg-emerald-50"
            >
              <Check className="h-4 w-4" />
            </button>
            <button
              type="button"
              title="Tolak"
              onClick={async () => {
                await apiSend(`/master/pendapat-warga/${row.id}`, "PATCH", { status: "DITOLAK" });
                toast.success("Pendapat ditolak");
                helpers.refresh();
              }}
              className="rounded-md p-1.5 text-red-600 hover:bg-red-50"
            >
              <X className="h-4 w-4" />
            </button>
          </>
        )}
      />
    );
  }

  if (slug === "pengaturan") {
    return (
      <SettingsForm
        grup="layanan-mandiri"
        title="Pengaturan Layanan Mandiri"
        description="Aktivasi dan kebijakan layanan mandiri warga."
        fields={[
          {
            kunci: "mandiri.aktif",
            label: "Layanan Mandiri",
            type: "checkbox",
            help: "Apakah layanan mandiri ditampilkan atau tidak",
            defaultValue: "1",
          },
          {
            kunci: "mandiri.pendaftaran",
            label: "Tampilkan Pendaftaran",
            type: "checkbox",
            help: "Aktifkan / nonaktifkan pendaftaran layanan mandiri",
            defaultValue: "1",
          },
          {
            kunci: "mandiri.latar_login",
            label: "Latar Login Mandiri",
            type: "image",
            help: "Kosongkan jika latar login mandiri tidak berubah.",
          },
          { kunci: "mandiri.pin_default", label: "PIN Default", placeholder: "misal tanggal lahir" },
          { kunci: "mandiri.masa_aktif_hari", label: "Masa Aktif Akun (hari)", type: "number", defaultValue: "365" },
          { kunci: "mandiri.pesan_selamat", label: "Pesan Selamat Datang", type: "textarea", full: true },
          { kunci: "mandiri.gawai_wajib", label: "Wajib Gawai Terdaftar", type: "checkbox", defaultValue: "0" },
        ]}
      />
    );
  }

  return <div className="py-10 text-center text-sm text-muted-foreground">Halaman tidak ditemukan.</div>;
}
