/* eslint-disable -- temporary disable for development/testing purposes */

import { NextResponse } from 'next/server';
import  { RowDataPacket } from 'mysql2/promise';

import { getDBConnection } from '@/lib/db'; // adjust path as needed

interface MonthlyData extends RowDataPacket {
  month: number;
  count: number;
}

function initializeMonthlyArray() {
  return new Array(12).fill(0);
}

export async function GET(request: Request) {
  try {
    const url = new URL(request.url);
    const companyId = url.searchParams.get('companyId'); // get companyId if present

    const connection = await getDBConnection();
    const currentYear = new Date().getFullYear();
    const lastYear = currentYear - 1;

    // Base query and params
    let baseQuery = `
      SELECT MONTH(auto_date) AS month, COUNT(*) AS count
      FROM appointments
      WHERE status = 'complete' AND YEAR(auto_date) = ?
    `;

    // If companyId exists, add company filter
    if (companyId) {
      baseQuery += ` AND company_id = ? `;
    }

    baseQuery += ` GROUP BY MONTH(auto_date)`;

    // Prepare parameters arrays
    const paramsThisYear = companyId ? [currentYear, companyId] : [currentYear];
    const paramsLastYear = companyId ? [lastYear, companyId] : [lastYear];

    const [thisYearRows] = await connection.execute<MonthlyData[]>(baseQuery, paramsThisYear);
    const [lastYearRows] = await connection.execute<MonthlyData[]>(baseQuery, paramsLastYear);

    await connection.end();

    const thisYearData = initializeMonthlyArray();
    const lastYearData = initializeMonthlyArray();

    thisYearRows.forEach(row => thisYearData[row.month - 1] = row.count);
    lastYearRows.forEach(row => lastYearData[row.month - 1] = row.count);

    return NextResponse.json({
      thisYear: thisYearData,
      lastYear: lastYearData,
    });
  } catch (error) {
    // console.error('Appointments per year API Error:', error);
    return NextResponse.json({ error: 'Failed to fetch chart data' }, { status: 500 });
  }
}
