const BaseController = require('./base.controller');
const { Especialista, Doctor, Especialidad } = require('../models');

class EspecialistaController extends BaseController {
  constructor() {
    super(Especialista, 'Especialista', []);
  }

  // Sobrescribir getAll para incluir relaciones
  getAll = async (req, res, next) => {
    try {
      const data = await Especialista.findAndCountAll({
        include: [
          {
            model: Doctor,
            as: 'doctor',
            attributes: { exclude: ['Password'] }
          },
          {
            model: Especialidad,
            as: 'especialidad'
          }
        ]
      });

      const cantidad = data.count;
      const rows = data.rows;

      res.json({
        success: true,
        message: 'Especialistas obtenidos exitosamente',
        count: cantidad,
        data: rows
      });
    } catch (error) {
      next(error);
    }
  };

  // Obtener por doctor
  getByDoctor = async (req, res, next) => {
    try {
      const { doctorId } = req.params;
      
      const data = await Especialista.findAll({
        where: { DoctorId: doctorId },
        include: [
          {
            model: Especialidad,
            as: 'especialidad'
          }
        ]
      });

      res.json({
        success: true,
        message: 'Especialidades del doctor obtenidas exitosamente',
        data
      });
    } catch (error) {
      next(error);
    }
  };

  // Obtener por especialidad
  getByEspecialidad = async (req, res, next) => {
    try {
      const { especialidadId } = req.params;
      
      const data = await Especialista.findAll({
        where: { EspecialidadId: especialidadId },
        include: [
          {
            model: Doctor,
            as: 'doctor',
            attributes: { exclude: ['Password'] }
          }
        ]
      });

      res.json({
        success: true,
        message: 'Doctores de la especialidad obtenidos exitosamente',
        data
      });
    } catch (error) {
      next(error);
    }
  };
}

module.exports = new EspecialistaController();