/* 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 DashboardData extends RowDataPacket {
  totalPatients: number;
  pendingAssignments: number;
  totalProviders: number;
  totalVisits: number; // current month visits
  lastMonthVisits: number;
  activeRequests: number;
  completedAppointments: number;
  scheduledAppointments: number;
  cancelledAppointments: number;
}

export async function GET(request: Request) {
  try {
    const connection = await getDBConnection();

    // Get companyId from URL search params
    const { searchParams } = new URL(request.url);
    const companyId = searchParams.get('companyId');

    // Helper: If companyId exists, add a WHERE condition filtering by companyId, else empty string
    const companyFilter = companyId ? `AND company_id = ?` : '';

    // Construct SQL with optional company filtering for each subquery
    const sql = `
      SELECT
        (SELECT COUNT(*) FROM users WHERE role = 'user' ${companyFilter}) AS totalPatients,
        (SELECT COUNT(*) FROM requests WHERE status = 'pending' ${companyFilter}) AS pendingAssignments,
        (SELECT COUNT(*) FROM requests WHERE status = 'active' ${companyFilter}) AS activeRequests,
        (SELECT COUNT(*) FROM users WHERE role = 'doctor' ${companyFilter}) AS totalProviders,
        (SELECT COUNT(*) FROM appointments WHERE status = 'complete' ${companyFilter}) AS completedAppointments,
        (SELECT COUNT(*) FROM appointments WHERE status = 'active' ${companyFilter}) AS scheduledAppointments,
        (SELECT COUNT(*) FROM appointments WHERE status = 'cancel' ${companyFilter}) AS cancelledAppointments,
        (SELECT COUNT(*) FROM appointments WHERE status = 'complete' 
          AND MONTH(auto_date) = MONTH(CURRENT_DATE()) 
          AND YEAR(auto_date) = YEAR(CURRENT_DATE()) ${companyFilter}) AS totalVisits,
        (SELECT COUNT(*) FROM appointments WHERE status = 'complete' 
          AND MONTH(auto_date) = MONTH(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) 
          AND YEAR(auto_date) = YEAR(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) ${companyFilter}) AS lastMonthVisits
    `;

    // Prepare params array if companyId exists, otherwise empty
    // Since companyId used multiple times, repeat it accordingly
    const params = companyId
      ? Array(9).fill(companyId) // 9 subqueries each need companyId param
      : [];

    const [rows] = await connection.execute<DashboardData[]>(sql, params);

    await connection.end();

    if (rows && rows.length > 0) {
      return NextResponse.json(rows[0]);
    } else {
      return NextResponse.json({
        totalPatients: 0,
        pendingAssignments: 0,
        totalProviders: 0,
        totalVisits: 0,
        lastMonthVisits: 0,
        activeRequests: 0,
        completedAppointments: 0,
        scheduledAppointments: 0,
        cancelledAppointments: 0,
      });
    }
  } catch (error) {
    console.error('Dashboard Overview API Error:', error);
    return NextResponse.json({ error: 'Failed to fetch overview stats' }, { status: 500 });
  }
}
