/** کدهای تخفیف */
import { AdminHeader, Card, Empty, Pill, SavedNotice, Table } from "@/components/admin/ui";
import { SubmitButton } from "@/components/admin/SubmitButton";
import { db } from "@/lib/db";
import { faNumber, formatJalaliShort, formatToman } from "@/lib/format";
import { createDiscountAction, toggleDiscountAction } from "@/server/admin/moderation";
import { requireStaffPage } from "@/server/admin/guard";

export const metadata = { title: "کدهای تخفیف" };
export const dynamic = "force-dynamic";

export default async function AdminDiscounts({ searchParams }: { searchParams: Promise<{ saved?: string; error?: string }> }) {
  await requireStaffPage("/admin/discounts", "discounts");
  const { saved, error } = await searchParams;
  const codes = await db.discountCode.findMany({ orderBy: { code: "asc" }, include: { _count: { select: { orders: true } } } });
  return (
    <>
      <AdminHeader title="کدهای تخفیف" description="کد در صفحه تسویه حساب اعمال می‌شود و مبلغ آن در سرور محاسبه می‌شود" />
      <SavedNotice show={saved === "1"} text="کد تخفیف ساخته شد" />
      {error && <p className="mb-4 rounded-xl bg-paper px-4 py-3 text-sm ring-1 ring-ink" role="alert">⚠ {error}</p>}
      <div className="grid gap-4 lg:grid-cols-[1fr_320px]">
        <Card>
          {codes.length ? (
            <Table head={["کد", "تخفیف", "حداقل خرید", "استفاده", "انقضا", "وضعیت", ""]}>
              {codes.map((d) => (
                <tr key={d.id}>
                  <td><bdi className="font-bold">{d.code}</bdi><span className="block text-[11px] text-muted">{d.label}</span></td>
                  <td className="whitespace-nowrap">{d.type === "PERCENT" ? `٪${faNumber(d.value)}` : formatToman(d.value)}{d.maxAmount ? <span className="block text-[11px] text-muted">سقف {formatToman(d.maxAmount)}</span> : null}</td>
                  <td className="whitespace-nowrap text-xs">{d.minSubtotal ? formatToman(d.minSubtotal) : "—"}</td>
                  <td className="text-xs">{faNumber(d.usedCount)}{d.usageLimit ? ` / ${faNumber(d.usageLimit)}` : ""}</td>
                  <td className="text-xs">{d.endsAt ? formatJalaliShort(d.endsAt) : "—"}</td>
                  <td><Pill tone={d.isActive ? "ink" : "line"}>{d.isActive ? "فعال" : "غیرفعال"}</Pill></td>
                  <td>
                    <form action={toggleDiscountAction}>
                      <input type="hidden" name="id" value={d.id} />
                      <SubmitButton className="text-xs underline" pendingText="…">{d.isActive ? "غیرفعال کن" : "فعال کن"}</SubmitButton>
                    </form>
                  </td>
                </tr>
              ))}
            </Table>
          ) : <Empty>کدی ثبت نشده</Empty>}
        </Card>
        <Card title="کد جدید">
          <form action={createDiscountAction} className="space-y-3">
            <label className="block"><span className="label">کد (لاتین)</span><input name="code" className="field h-10 uppercase" dir="ltr" required maxLength={20} /></label>
            <label className="block"><span className="label">توضیح برای مشتری</span><input name="label" className="field h-10" required maxLength={80} placeholder="مثلاً ۲۰٪ تخفیف یلدا" /></label>
            <div className="grid grid-cols-2 gap-2">
              <label className="block"><span className="label">نوع</span><select name="type" className="field h-10"><option value="PERCENT">درصدی</option><option value="FIXED">مبلغ ثابت</option></select></label>
              <label className="block"><span className="label">مقدار</span><input name="value" className="field h-10" inputMode="numeric" required /></label>
              <label className="block"><span className="label">حداقل خرید</span><input name="minSubtotal" className="field h-10" inputMode="numeric" defaultValue="0" /></label>
              <label className="block"><span className="label">سقف تخفیف</span><input name="maxAmount" className="field h-10" inputMode="numeric" /></label>
              <label className="block"><span className="label">ظرفیت استفاده</span><input name="usageLimit" className="field h-10" inputMode="numeric" /></label>
              <label className="block"><span className="label">تاریخ انقضا</span><input name="endsAt" type="date" className="field h-10" /></label>
            </div>
            <SubmitButton className="btn-primary w-full">ساخت کد</SubmitButton>
            <p className="text-[11px] text-muted">مبالغ به تومان. فقط نقش «مدیر» می‌تواند کد بسازد.</p>
          </form>
        </Card>
      </div>
    </>
  );
}
