import { NextResponse } from "next/server";
import { db, supportTickets, desc } from "@epicure/db";
import { requireAdmin } from "@/lib/api-auth";
import { getPublicUrl } from "@/lib/storage";

export async function GET() {
  const { response } = await requireAdmin();
  if (response) return response;

  const rows = await db.query.supportTickets.findMany({
    orderBy: desc(supportTickets.createdAt),
    with: {
      attachments: true,
      user: { columns: { email: true, username: true } },
    },
  });

  return NextResponse.json(
    rows.map((r) => ({
      id: r.id,
      userId: r.userId,
      userEmail: r.user.email,
      username: r.user.username,
      type: r.type,
      title: r.title,
      description: r.description,
      status: r.status,
      giteaIssueUrl: r.giteaIssueUrl,
      giteaError: r.giteaError,
      createdAt: r.createdAt,
      updatedAt: r.updatedAt,
      attachments: r.attachments.map((a) => ({ ...a, url: getPublicUrl(a.storageKey) })),
    }))
  );
}
