import { NextResponse } from "next/server";
import { db } from "../../lib/db";

export async function GET(req: Request) {
  try {
    const { searchParams } = new URL(req.url);

    const start = searchParams.get("start");
    const end = searchParams.get("end");

    const page = parseInt(searchParams.get("page") || "1");
    const limit = parseInt(searchParams.get("limit") || "50");

    const offset = (page - 1) * limit;

    let query = `
      SELECT 
        al.id,
        al.entity,
        al.entity_id,
        al.action,
        al.description,
        al.created_by,
        u.name as created_by_name,
        al.created_at
      FROM activity_logs al
      LEFT JOIN users u ON u.id = al.created_by
    `;

    const params: any[] = [];

    // 🔥 FILTER RANGE TANGGAL (tetap sama)
    if (start && end) {
      query += ` WHERE DATE(created_at) BETWEEN ? AND ? `;
      params.push(start, end);
    }

    query += `
      ORDER BY created_at DESC
      LIMIT ? OFFSET ?
    `;

    params.push(limit, offset);

    const [rows]: any = await db.query(query, params);

    // optional total count (tetap sama)
    let totalQuery = `SELECT COUNT(*) as total FROM activity_logs`;
    const totalParams: any[] = [];

    if (start && end) {
      totalQuery += ` WHERE DATE(created_at) BETWEEN ? AND ? `;
      totalParams.push(start, end);
    }

    const [totalResult]: any = await db.query(totalQuery, totalParams);

    // =========================
    // 🔥 NORMALIZE TIME (IMPORTANT)
    // =========================
    const normalizedRows = rows.map((row: any) => ({
      ...row,
      // pastikan format konsisten UTC → UI handle WIB
      created_at: row.created_at,
    }));

    return NextResponse.json({
      success: true,
      data: normalizedRows,
      pagination: {
        page,
        limit,
        total: totalResult?.[0]?.total || 0,
      },
    });

  } catch (error: any) {
    console.error("Activity Logs Error:", error);

    return NextResponse.json(
      {
        success: false,
        message: "Failed to fetch activity logs",
        error: error?.message,
      },
      { status: 500 }
    );
  }
}