import prisma from "@/lib/prisma";
import { auth } from "@/lib/auth";
import { redirect } from "next/navigation";
import { photoUrl } from "@/lib/media";
import Link from "next/link";
import { ModerationActions } from "./ModerationActions";

export default async function AdminModerationPage({
  searchParams,
}: {
  searchParams: Promise<Record<string, string | string[] | undefined>>;
}) {
  const session = await auth();
  if (!session?.user || session.user.userType !== "admin") {
    redirect("/login");
  }

  const params = await searchParams;
  const statusFilter = String(params.status ?? "pending");

  const [photos, pendingCount] = await Promise.all([
    prisma.photo.findMany({
      where: { moderation_status: statusFilter },
      orderBy: { created_at: "asc" },
      take: 60,
      include: {
        user: { select: { id: true, username: true, id_aw: true } },
      },
    }),
    prisma.photo.count({ where: { moderation_status: "pending" } }),
  ]);

  return (
    <div className="space-y-6">
      <div className="flex items-center justify-between">
        <h1 className="text-2xl font-bold">Photo Moderation</h1>
        <span className="bg-yellow-500/20 text-yellow-400 px-3 py-1 rounded-lg text-sm font-medium">
          {pendingCount} pending
        </span>
      </div>

      {/* Status Tabs */}
      <div className="flex gap-2">
        {["pending", "approved", "rejected"].map((status) => (
          <Link
            key={status}
            href={`/admin/moderation?status=${status}`}
            className={`px-4 py-2 rounded-lg text-sm transition-colors capitalize ${
              statusFilter === status
                ? "bg-primary text-white"
                : "bg-surface hover:bg-surface-light text-text-muted"
            }`}
          >
            {status}
          </Link>
        ))}
      </div>

      {photos.length === 0 ? (
        <div className="bg-surface rounded-lg p-12 text-center">
          <p className="text-2xl mb-2">All caught up!</p>
          <p className="text-text-muted">
            No {statusFilter} photos to review.
          </p>
        </div>
      ) : (
        <ModerationActions
          photos={photos.map((p) => ({
            id: p.id,
            photo: photoUrl(p.photo, p.user.id_aw),
            username: p.user.username || "Unknown",
            userId: p.user.id,
            uploadDate: p.created_at.toISOString(),
            type: p.type || "photo",
            status: p.moderation_status,
          }))}
          currentStatus={statusFilter}
        />
      )}
    </div>
  );
}
