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

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


export async function GET(req: NextRequest, { params }: { params: { id: string } }) {
 
  const patientId = params.id;
 
  try {
    const connection = await getDBConnection();

    const [userRows]: any = await connection.execute(
        'SELECT * FROM users WHERE id = ?',
        [patientId]
      );
      const user = Array.isArray(userRows) && userRows.length > 0 ? userRows[0] : null;
      

    const [appointments] = await connection.execute(
    //   'SELECT * FROM appointments WHERE user_id = ? ORDER BY date DESC',
      `SELECT 
           n.*, 
           d.name AS doctor_name, 
           d.degree AS doctor_degree
         FROM appointments n
         LEFT JOIN users d ON n.doctor_id = d.id
         WHERE n.user_id = ? ORDER BY date DESC`,
      [patientId]
    );

    
    const [homeExercises] = await connection.execute(
        `SELECT 
           n.*, 
           d.name AS doctor_name, 
           d.degree AS doctor_degree
         FROM home_exercises n
         LEFT JOIN users d ON n.doctor_id = d.id
         WHERE n.user_id = ?`,
        [patientId]
      );

    const [userTags] = await connection.execute(
      'SELECT t.* FROM user_tags ut JOIN tags t ON ut.tag_id = t.id WHERE ut.user_id = ?',
      [patientId]
    );

    const [medicalCharts] = await connection.execute(
      'SELECT * FROM medical_chart WHERE user_id = ?',
      [patientId]
    );

 
      const [chats] = await connection.execute(
        `
        SELECT
          g.group_name,
          g.group_image,
          g.id,
          g.created_by,
          GROUP_CONCAT(u.name) AS member_names,
          GROUP_CONCAT(u.email) AS member_emails,
          GROUP_CONCAT(u.id) AS member_ids,
          c.first_name AS company_first_name,
          c.last_name AS company_last_name,
          c.id AS company_id,
          COALESCE(last_message.message, last_message.file_path) AS last_message,
          last_message.timestamp AS timestamp,
          last_sender.name AS last_sender_name
        FROM
          \`groups\` g
        JOIN
          group_members gm ON g.id = gm.group_id
        JOIN
          users u ON gm.user_id = u.id
        JOIN
          comapniese c ON g.company_id = c.id
        LEFT JOIN (
          SELECT
            group_id,
            message,
            file_path,
            timestamp,
            sender_id
          FROM
            group_messages
          WHERE
            id IN (
              SELECT MAX(id) FROM group_messages GROUP BY group_id
            )
        ) last_message ON g.id = last_message.group_id
        LEFT JOIN
          users last_sender ON last_message.sender_id = last_sender.id
        WHERE
          (g.created_by = ? OR g.id IN (
            SELECT group_id FROM group_members WHERE user_id = ?
          ))
        GROUP BY
          g.id, g.group_name, g.group_image, g.created_by,
          c.first_name, c.id, last_message.message, last_message.file_path, last_message.timestamp, last_sender.name
        LIMIT 0, 1000
        `,
        [patientId, patientId]
      );
      
    
     
    

    const [attachments] = await connection.execute(
      `SELECT 
      n.*, 
      d.name AS doctor_name, 
      d.degree AS doctor_degree
    FROM attachments n
    LEFT JOIN users d ON n.doctor_id = d.id
    WHERE n.user_id = ?`,
      [patientId]
    );

    const [callLogs] = await connection.execute(
      `SELECT 
         l.*, 
         u.name AS user_name, 
         d.name AS doctor_name 
       FROM call_log l 
       LEFT JOIN users u ON l.user_id = u.id 
       LEFT JOIN users d ON l.doctor_id = d.id 
       WHERE l.user_id = ?`,
      [patientId]
    );
    
    const [notes] = await connection.execute(
        `SELECT 
           n.*, 
           d.name AS doctor_name, 
           d.degree AS doctor_degree
         FROM notes n
         LEFT JOIN users d ON n.doctor_id = d.id
         WHERE n.user_id = ?`,
        [patientId]
      );

    await connection.end();

    return NextResponse.json({
        user,
      appointments,
      homeExercises,
      userTags,
      medicalCharts,
      chats,
      attachments,
      callLogs,
      notes
    });
  } catch (error) {
    // console.error(error);
    return NextResponse.json({ error: 'Failed to fetch patient details' }, { status: 500 });
  }
}
