const BaseController = require('./base.controller');
const { 
  Antecedenteheredofamiliar, 
  Antecedentenopatologico, 
  Antecedentepatologico,
  Antecedenteheredofamiliarhistoria,
  Antecedentenopatologicohistoria,
  Antecedentepatologicohistoria,
  Cliente
} = require('../models');

// Antecedente Heredo Familiar
class AntecedenteheredofamiliarController extends BaseController {
  constructor() {
    super(Antecedenteheredofamiliar, 'Antecedenteheredofamiliar', ['Name']);
  }
}

// Antecedente No Patológico
class AntecedentenopatologicoController extends BaseController {
  constructor() {
    super(Antecedentenopatologico, 'Antecedentenopatologico', ['Name']);
  }
}

// Antecedente Patológico
class AntecedentepatologicoController extends BaseController {
  constructor() {
    super(Antecedentepatologico, 'Antecedentepatologico', ['Name']);
  }
}

// Historia Heredo Familiar
class AntecedenteheredofamiliarhistoriaController extends BaseController {
  constructor() {
    super(Antecedenteheredofamiliarhistoria, 'Antecedenteheredofamiliarhistoria', []);
  }

  // Obtener por cliente
  getByCliente = async (req, res, next) => {
    try {
      const { clienteId } = req.params;
      
      const data = await Antecedenteheredofamiliarhistoria.findAll({
        where: { ClienteId: clienteId },
        include: [
          {
            model: Antecedenteheredofamiliar,
            as: 'antecedenteheredofamiliar'
          }
        ]
      });

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

// Historia No Patológico
class AntecedentenopatologicohistoriaController extends BaseController {
  constructor() {
    super(Antecedentenopatologicohistoria, 'Antecedentenopatologicohistoria', []);
  }

  // Obtener por cliente
  getByCliente = async (req, res, next) => {
    try {
      const { clienteId } = req.params;
      
      const data = await Antecedentenopatologicohistoria.findAll({
        where: { ClienteId: clienteId },
        include: [
          {
            model: Antecedentenopatologico,
            as: 'antecedentenopatologico'
          }
        ]
      });

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

// Historia Patológico
class AntecedentepatologicohistoriaController extends BaseController {
  constructor() {
    super(Antecedentepatologicohistoria, 'Antecedentepatologicohistoria', []);
  }

  // Obtener por cliente
  getByCliente = async (req, res, next) => {
    try {
      const { clienteId } = req.params;
      
      const data = await Antecedentepatologicohistoria.findAll({
        where: { ClienteId: clienteId },
        include: [
          {
            model: Antecedentepatologico,
            as: 'antecedentepatologico'
          }
        ]
      });

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

module.exports = {
  antecedenteheredofamiliarController: new AntecedenteheredofamiliarController(),
  antecedentenopatologicoController: new AntecedentenopatologicoController(),
  antecedentepatologicoController: new AntecedentepatologicoController(),
  antecedenteheredofamiliarhistoriaController: new AntecedenteheredofamiliarhistoriaController(),
  antecedentenopatologicohistoriaController: new AntecedentenopatologicohistoriaController(),
  antecedentepatologicohistoriaController: new AntecedentepatologicohistoriaController()
};