/* eslint-disable no-eval */
import { NextResponse } from "next/server";
const fs = eval('require("fs")') as typeof import("fs");
const path = eval('require("path")') as typeof import("path");
import { getBotDataDir } from "@/lib/paths";

interface Ticket {
  id: string;
  userId: string;
  username?: string;
  subject?: string;
  status?: string;
  createdAt?: string;
  closedAt?: string;
  [key: string]: unknown;
}

export async function GET() {
  try {
    const dataDir = getBotDataDir("bot_comunidade");
    const ticketsFile = path.join(dataDir, "tickets.json");

    if (!fs.existsSync(ticketsFile)) {
      return NextResponse.json({
        total: 0,
        open: 0,
        closed: 0,
        recent: [],
        message: "No tickets data file found.",
      });
    }

    const content = fs.readFileSync(ticketsFile, "utf-8");
    const data = JSON.parse(content);

    // Handle both array and object formats
    let tickets: Ticket[] = [];
    if (Array.isArray(data)) {
      tickets = data;
    } else if (data && typeof data === "object") {
      // Could be { tickets: [...] } or { "id": {...}, ... }
      if (Array.isArray(data.tickets)) {
        tickets = data.tickets;
      } else {
        // Object with ticket IDs as keys
        tickets = Object.entries(data).map(([id, value]) => ({
          id,
          ...(typeof value === "object" && value !== null ? value : {}),
        })) as Ticket[];
      }
    }

    const open = tickets.filter(
      (t) => !t.status || t.status === "open" || t.status === "active"
    ).length;
    const closed = tickets.filter(
      (t) => t.status === "closed" || t.status === "resolved"
    ).length;

    // Sort by createdAt descending and get last 20
    const sorted = [...tickets].sort((a, b) => {
      const dateA = a.createdAt ? new Date(a.createdAt).getTime() : 0;
      const dateB = b.createdAt ? new Date(b.createdAt).getTime() : 0;
      return dateB - dateA;
    });

    const recent = sorted.slice(0, 20);

    return NextResponse.json({
      total: tickets.length,
      open,
      closed,
      recent,
    });
  } catch (error) {
    return NextResponse.json(
      {
        error: `Failed to read tickets: ${error instanceof Error ? error.message : String(error)}`,
      },
      { status: 500 }
    );
  }
}
