import Link from "next/link";
import { ReadingStatus } from "@prisma/client";
import { prisma } from "@/lib/prisma";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Button } from "@/components/ui/button";

const PAGE_SIZE = 20;

type PaymentFilter = "pending" | "completed";

function normalizePaymentFilter(value?: string): PaymentFilter {
  if (value === "pending") return "pending";
  return "completed";
}

function buildReadingsHref(payment: PaymentFilter, page?: number) {
  const params = new URLSearchParams({ payment });
  if (page && page > 1) {
    params.set("page", String(page));
  }
  return `/admin/readings?${params.toString()}`;
}

const pendingWhere = { status: ReadingStatus.PENDING_PAYMENT };
const completedWhere = { status: { in: [ReadingStatus.PAID, ReadingStatus.COMPLETED] } };

export default async function AdminReadingsPage({
  searchParams,
}: {
  searchParams: Promise<{ payment?: string; page?: string }>;
}) {
  const { payment, page } = await searchParams;
  const filter = normalizePaymentFilter(payment);
  const where = filter === "pending" ? pendingWhere : completedWhere;
  const pageRaw = Math.max(1, parseInt(page ?? "1", 10) || 1);

  const [pendingCount, completedCount, filteredTotal] = await Promise.all([
    prisma.reading.count({ where: pendingWhere }),
    prisma.reading.count({ where: completedWhere }),
    prisma.reading.count({ where }),
  ]);

  const totalPages = Math.max(1, Math.ceil(filteredTotal / PAGE_SIZE));
  const pageNum = Math.min(pageRaw, totalPages);
  const skip = (pageNum - 1) * PAGE_SIZE;

  const readings = await prisma.reading.findMany({
    where,
    orderBy: { createdAt: "desc" },
    skip,
    take: PAGE_SIZE,
    include: {
      user: { select: { phone: true } },
      payment: { select: { status: true, amount: true } },
    },
  });

  return (
    <div className="space-y-6">
      <div className="flex flex-wrap items-center justify-between gap-3">
        <h1 className="text-2xl font-bold">فال‌ها</h1>
        <div className="flex gap-2">
          <Button asChild variant={filter === "completed" ? "default" : "outline"} size="sm">
            <Link href={buildReadingsHref("completed")}>
              پرداخت شده ({completedCount.toLocaleString("fa-IR")})
            </Link>
          </Button>
          <Button asChild variant={filter === "pending" ? "default" : "outline"} size="sm">
            <Link href={buildReadingsHref("pending")}>
              در انتظار پرداخت ({pendingCount.toLocaleString("fa-IR")})
            </Link>
          </Button>
        </div>
      </div>

      <div className="grid gap-4 md:grid-cols-2">
        <Card>
          <CardHeader>
            <CardTitle className="text-base">پرداخت شده</CardTitle>
          </CardHeader>
          <CardContent>
            <p className="text-2xl font-bold">{completedCount.toLocaleString("fa-IR")}</p>
          </CardContent>
        </Card>
        <Card>
          <CardHeader>
            <CardTitle className="text-base">در انتظار پرداخت</CardTitle>
          </CardHeader>
          <CardContent>
            <p className="text-2xl font-bold">{pendingCount.toLocaleString("fa-IR")}</p>
          </CardContent>
        </Card>
      </div>

      <Card>
        <CardContent className="p-0">
          {readings.length === 0 ? (
            <p className="p-6 text-sm text-muted-foreground">
              {filter === "pending"
                ? "فالی در انتظار پرداخت نیست."
                : "فالی با پرداخت موفق یافت نشد."}
            </p>
          ) : (
            <table className="w-full text-sm">
              <thead>
                <tr className="border-b">
                  <th className="text-right p-4">کاربر</th>
                  <th className="text-right p-4">نوع</th>
                  <th className="text-right p-4">وضعیت</th>
                  <th className="text-right p-4">پرداخت</th>
                  <th className="text-right p-4">تاریخ</th>
                  <th className="text-right p-4">لینک</th>
                </tr>
              </thead>
              <tbody>
                {readings.map((r) => (
                  <tr key={r.id} className="border-b last:border-0">
                    <td className="p-4">{r.user.phone}</td>
                    <td className="p-4">{r.spreadType}</td>
                    <td className="p-4">
                      <div className="space-y-1">
                        <div>{r.status}</div>
                        {r.status === "PAID" && !r.sections && (
                          <div className="text-xs text-amber-600">در انتظار پاسخ دستی (فال اصلی)</div>
                        )}
                        {r.followUpQuestion && r.followUpCardIds && !r.followUpSections && (
                          <div className="text-xs text-amber-600">در انتظار پاسخ دستی (پیگیری)</div>
                        )}
                      </div>
                    </td>
                    <td className="p-4">
                      {r.payment
                        ? `${r.payment.status} - ${Number(r.payment.amount).toLocaleString("fa-IR")}`
                        : "-"}
                    </td>
                    <td className="p-4">{new Date(r.createdAt).toLocaleDateString("fa-IR")}</td>
                    <td className="p-4">
                      <Link href={`/admin/readings/${r.id}`} className="underline">
                        مشاهده
                      </Link>
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          )}
        </CardContent>
      </Card>

      {filteredTotal > 0 && (
        <div className="flex flex-wrap items-center justify-between gap-3">
          <p className="text-sm text-muted-foreground">
            نمایش {(skip + 1).toLocaleString("fa-IR")} تا{" "}
            {Math.min(skip + readings.length, filteredTotal).toLocaleString("fa-IR")} از{" "}
            {filteredTotal.toLocaleString("fa-IR")} فال
          </p>
          {totalPages > 1 && (
            <div className="flex items-center gap-2">
              {pageNum > 1 ? (
                <Button asChild variant="outline" size="sm">
                  <Link href={buildReadingsHref(filter, pageNum - 1)}>قبلی</Link>
                </Button>
              ) : (
                <Button variant="outline" size="sm" disabled>
                  قبلی
                </Button>
              )}
              <span className="text-sm text-muted-foreground">
                صفحه {pageNum.toLocaleString("fa-IR")} از {totalPages.toLocaleString("fa-IR")}
              </span>
              {pageNum < totalPages ? (
                <Button asChild variant="outline" size="sm">
                  <Link href={buildReadingsHref(filter, pageNum + 1)}>بعدی</Link>
                </Button>
              ) : (
                <Button variant="outline" size="sm" disabled>
                  بعدی
                </Button>
              )}
            </div>
          )}
        </div>
      )}
    </div>
  );
}
