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

import { NextRequest, NextResponse } from 'next/server';
import { getDBConnection } from '@/lib/db'; // adjust path as needed


// GET /api/users?role=manager|provider|user

async function buildUserQuery(companyId: string | null, role: string) {
  let query = `
    SELECT
      u.*,
      (SELECT COUNT(ap.id) FROM appointments ap WHERE ap.user_id = u.id AND ap.company_id = ? AND ap.status = 'complete') AS total_complete_appointments,
      (SELECT COUNT(ap.id) FROM appointments ap WHERE ap.user_id = u.id AND ap.company_id = ? AND ap.status = 'pending') AS total_pending_appointments,
      (SELECT COUNT(r.id) FROM requests r WHERE r.user_id = u.id AND r.company_id = ? AND r.status = 'pending') AS total_pending_requests,
      (SELECT COUNT(r.id) FROM requests r WHERE r.user_id = u.id AND r.company_id = ? AND r.status = 'complete') AS total_complete_requests,
      (SELECT COUNT(r.id) FROM requests r WHERE r.user_id = u.id AND r.company_id = ? AND r.status = 'active') AS total_active_requests,
      CONCAT(c.first_name, ' ', c.last_name) AS company_name
    FROM users u
    LEFT JOIN comapniese c ON u.company_id = c.id
    WHERE u.role = ? AND u.disable = 'false'
  `;

  const params = [
    companyId, // For total_complete_appointments
    companyId, // For total_pending_appointments
    companyId, // For total_pending_requests
    companyId, // For total_complete_requests
    companyId, // For total_active_requests
    role,      // For u.role = ?
  ];

  if (companyId) {
    query += ' AND u.company_id = ?';
    params.push(companyId);
  }

  return { query, params };
}

async function buildDoctorQuery(companyId: string | null, role: string) {
  // Customize this query for doctors as needed
  let query = `
  SELECT
    u.*,
    (SELECT COUNT(r.id) FROM requests r WHERE r.user_id = u.id AND r.company_id = ? AND r.status = 'pending') AS total_pending_requests,
    (SELECT COUNT(r.id) FROM requests r WHERE r.user_id = u.id AND r.company_id = ? AND r.status = 'complete') AS total_complete_requests,
    (SELECT COUNT(r.id) FROM requests r WHERE r.user_id = u.id AND r.company_id = ? AND r.status = 'active') AS total_active_requests,
    CONCAT(c.first_name, ' ', c.last_name) AS company_name
  FROM users u
  LEFT JOIN comapniese c ON u.company_id = c.id
  WHERE u.role = ? AND u.disable = 'false'
    AND u.company_id = ?
`;

const params = [
  companyId, // 1 - for total_pending_requests
  companyId, // 2 - for total_complete_requests
  companyId, // 3 - for total_active_requests
  role,      // 4 - for u.role = ?
  companyId  // 5 - for u.company_id = ?
];

  if (companyId) {
    query += ' AND company_id = ?';
    params.push(companyId);
  }

  return { query, params };
}

export async function GET(request: NextRequest) {
  const role = request.nextUrl.searchParams.get('role') || 'user';
  const companyId = request.nextUrl.searchParams.get('companyId') || null;

  try {
    const connection = await getDBConnection();
    let query: string = '';
    let params: any[] = [];
    let result;

    if (role === 'user') {
      const { query: userQuery, params: userParams } = await buildUserQuery(companyId, role);
      query = userQuery;
      params = userParams;
    } else if (role === 'doctor') {
      const { query: doctorQuery, params: doctorParams } = await buildDoctorQuery(companyId, role);
      query = doctorQuery;
      params = doctorParams;
    } else {
      // Default query if role is not 'user' or 'doctor'
      query = 'SELECT * FROM users WHERE role = ? AND disable = \'false\'';
      params = [role];
      if (companyId) {
        query += ' AND company_id = ?';
        params.push(companyId);
      }
    }

    [result] = await connection.execute(query, params);
    await connection.end();

    return NextResponse.json(result);
  } catch (error) {
    // console.error('GET Error:', error);
    return NextResponse.json({ error: 'Database query failed' }, { status: 500 });
  }
}


// POST /api/users  with JSON body
// { "name": "John", "email": "john@example.com", "role": "manager" }
export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    const { name, email, role } = body;

    if (!name || !email || !role) {
      return NextResponse.json({ error: 'Missing fields' }, { status: 400 });
    }

    const connection = await getDBConnection();
    const [result] = await connection.execute(
      'INSERT INTO users (name, email, role) VALUES (?, ?, ?)',
      [name, email, role]
    );
    await connection.end();

    return NextResponse.json({ message: 'User added', result });
  } catch (error) {
    // console.error('POST Error:', error);
    return NextResponse.json({ error: 'User insert failed' }, { status: 500 });
  }
}


// DELETE /api/users?id=123
export async function DELETE(request: NextRequest) {
  const userId = request.nextUrl.searchParams.get('id');

  if (!userId) {
    return NextResponse.json({ error: 'Missing user ID' }, { status: 400 });
  }

  try {
    const connection = await getDBConnection();
    const [result] = await connection.execute('DELETE FROM users WHERE id = ?', [userId]);
    await connection.end();

    if ((result as any).affectedRows === 0) {
      return NextResponse.json({ error: 'User not found' }, { status: 404 });
    }

    return NextResponse.json({ message: 'User deleted successfully' });
  } catch (error) {
    // console.error('DELETE Error:', error);
    return NextResponse.json({ error: 'User deletion failed' }, { status: 500 });
  }
}
