import { NextRequest, NextResponse } from "next/server";
import { requireAdmin, unauthorized } from "@/lib/admin-auth";
import { logAdminActivity } from "@/lib/admin-activity";
import { listVisitors } from "@/lib/admin-reports";
import { requestMeta } from "@/lib/request-meta";

export async function GET(req: NextRequest) {
  const admin = await requireAdmin();
  if (!admin) return unauthorized();

  const meta = requestMeta(req);
  const sp = req.nextUrl.searchParams;
  const filters = {
    state: sp.get("state") || undefined,
    arrivalFrom: sp.get("arrival_from") || undefined,
    arrivalTo: sp.get("arrival_to") || undefined,
    q: sp.get("q") || undefined,
    page: Number(sp.get("page") || 1),
    pageSize: Number(sp.get("page_size") || 25),
  };

  const data = await listVisitors(filters);

  await logAdminActivity({
    adminId: admin.id,
    username: admin.username,
    action: "view_visitors",
    resource: `visitors?${sp.toString()}`.slice(0, 120),
    outcome: "success",
    ip: meta.ip,
    userAgent: meta.userAgent,
    meta: {
      page: filters.page,
      state: filters.state || null,
      q: filters.q || null,
    },
  });

  return NextResponse.json({ ok: true, ...data });
}
