const sequelize = require('../config/database');
const { DataTypes } = require('sequelize');

// Tablas independientes
const Tipo = require('./Tipo')(sequelize, DataTypes);
const Tipodos = require('./Tipodos')(sequelize, DataTypes);
const Duracion = require('./Duracion')(sequelize, DataTypes);
const Diagnostico = require('./Diagnostico')(sequelize, DataTypes);
const Empresa = require('./Empresa')(sequelize, DataTypes);
const Especialidad = require('./Especialidad')(sequelize, DataTypes);
const Antecedenteheredofamiliar = require('./Antecedenteheredofamiliar')(sequelize, DataTypes);
const Antecedentenopatologico = require('./Antecedentenopatologico')(sequelize, DataTypes);
const Antecedentepatologico = require('./Antecedentepatologico')(sequelize, DataTypes);
const Admin = require('./Admin')(sequelize, DataTypes);
const Doctor = require('./Doctor')(sequelize, DataTypes);
const Cliente = require('./Cliente')(sequelize, DataTypes);
const Laboratorio = require('./Laboratorio')(sequelize, DataTypes);
const Laboratoriodos = require('./Laboratoriodos')(sequelize, DataTypes);
const ItemLaboratorio = require('./ItemLaboratorio')(sequelize, DataTypes);
const Cartilla = require('./Cartilla')(sequelize, DataTypes);
const Auditoria = require('./Auditoria')(sequelize, DataTypes);
const Agendamiento = require('./Agendamiento')(sequelize, DataTypes);

// Tablas dependientes
const Especialista = require('./Especialista')(sequelize, DataTypes);
const Cita = require('./Cita')(sequelize, DataTypes);
const Detallecita = require('./Detallecita')(sequelize, DataTypes);
const Dermatomafrontal = require('./Dermatomafrontal')(sequelize, DataTypes);
const Dermatomaposterior = require('./Dermatomaposterior')(sequelize, DataTypes);
const Laboratoriodoscita = require('./Laboratoriodoscita')(sequelize, DataTypes);
const Analisis = require('./Analisis')(sequelize, DataTypes);
const Resultado = require('./Resultado')(sequelize, DataTypes);
const Examepaciente = require('./Examepaciente')(sequelize, DataTypes);
const Duracioncita = require('./Duracioncita')(sequelize, DataTypes);
const ItemCartilla = require('./ItemCartilla')(sequelize, DataTypes);
const Antecedenteheredofamiliarhistoria = require('./Antecedenteheredofamiliarhistoria')(sequelize, DataTypes);
const Antecedentenopatologicohistoria = require('./Antecedentenopatologicohistoria')(sequelize, DataTypes);
const Antecedentepatologicohistoria = require('./Antecedentepatologicohistoria')(sequelize, DataTypes);

// Relaciones

// Especialista
Especialista.belongsTo(Doctor, { foreignKey: 'DoctorId', as: 'doctor' });
Doctor.hasMany(Especialista, { foreignKey: 'DoctorId', as: 'especialistas' });

Especialista.belongsTo(Especialidad, { foreignKey: 'EspecialidadId', as: 'especialidad' });
Especialidad.hasMany(Especialista, { foreignKey: 'EspecialidadId', as: 'especialistas' });

// Cita
Cita.belongsTo(Admin, { foreignKey: 'AdminId', as: 'admin' });
Admin.hasMany(Cita, { foreignKey: 'AdminId', as: 'citas' });

Cita.belongsTo(Cliente, { foreignKey: 'ClienteId', as: 'cliente' });
Cliente.hasMany(Cita, { foreignKey: 'ClienteId', as: 'citas' });

// Detallecita
Detallecita.belongsTo(Cita, { foreignKey: 'CitaId', as: 'cita' });
Cita.hasMany(Detallecita, { foreignKey: 'CitaId', as: 'detalles' });

// Dermatomafrontal
Dermatomafrontal.belongsTo(Cita, { foreignKey: 'CitaId', as: 'cita' });
Cita.hasOne(Dermatomafrontal, { foreignKey: 'CitaId', as: 'dermatomafrontal' });

// Dermatomaposterior
Dermatomaposterior.belongsTo(Cita, { foreignKey: 'CitaId', as: 'cita' });
Cita.hasOne(Dermatomaposterior, { foreignKey: 'CitaId', as: 'dermatomaposterior' });

// Laboratorio
Laboratorio.belongsTo(Tipo, { foreignKey: 'TipoId', as: 'tipo' });
Tipo.hasMany(Laboratorio, { foreignKey: 'TipoId', as: 'laboratorios' });

// Laboratoriodos
Laboratoriodos.belongsTo(Tipodos, { foreignKey: 'TipodosId', as: 'tipodos' });
Tipodos.hasMany(Laboratoriodos, { foreignKey: 'TipodosId', as: 'laboratoriosdos' });

// ItemLaboratorio
ItemLaboratorio.belongsTo(Laboratorio, { foreignKey: 'LaboratorioId', as: 'laboratorio' });
Laboratorio.hasMany(ItemLaboratorio, { foreignKey: 'LaboratorioId', as: 'items' });

// Laboratoriodoscita
Laboratoriodoscita.belongsTo(Cita, { foreignKey: 'CitaId', as: 'cita' });
Cita.hasMany(Laboratoriodoscita, { foreignKey: 'CitaId', as: 'laboratoriosdoscita' });

Laboratoriodoscita.belongsTo(Laboratoriodos, { foreignKey: 'LaboratoriodosId', as: 'laboratoriodos' });
Laboratoriodos.hasMany(Laboratoriodoscita, { foreignKey: 'LaboratoriodosId', as: 'citas' });

// Analisis
Analisis.belongsTo(Cita, { foreignKey: 'CitaId', as: 'cita' });
Cita.hasMany(Analisis, { foreignKey: 'CitaId', as: 'analisis' });

Analisis.belongsTo(Laboratorio, { foreignKey: 'LaboratorioId', as: 'laboratorio' });
Laboratorio.hasMany(Analisis, { foreignKey: 'LaboratorioId', as: 'analisis' });

// Resultado
Resultado.belongsTo(ItemLaboratorio, { foreignKey: 'ItemLaboratorioId', as: 'itemlaboratorio' });
ItemLaboratorio.hasMany(Resultado, { foreignKey: 'ItemLaboratorioId', as: 'resultados' });

Resultado.belongsTo(Cita, { foreignKey: 'CitaId', as: 'cita' });
Cita.hasMany(Resultado, { foreignKey: 'CitaId', as: 'resultados' });

// Examepaciente
Examepaciente.belongsTo(Detallecita, { foreignKey: 'DetallecitaId', as: 'detallecita' });
Detallecita.hasMany(Examepaciente, { foreignKey: 'DetallecitaId', as: 'examenes' });

// Duracioncita
Duracioncita.belongsTo(Detallecita, { foreignKey: 'DetallecitaId', as: 'detallecita' });
Detallecita.hasMany(Duracioncita, { foreignKey: 'DetallecitaId', as: 'duraciones' });

Duracioncita.belongsTo(Duracion, { foreignKey: 'DuracionId', as: 'duracion' });
Duracion.hasMany(Duracioncita, { foreignKey: 'DuracionId', as: 'citas' });

// ItemCartilla
ItemCartilla.belongsTo(Cartilla, { foreignKey: 'CartillaId', as: 'cartilla' });
Cartilla.hasMany(ItemCartilla, { foreignKey: 'CartillaId', as: 'items' });

// Antecedentes historia
Antecedenteheredofamiliarhistoria.belongsTo(Cliente, { foreignKey: 'ClienteId', as: 'cliente' });
Cliente.hasMany(Antecedenteheredofamiliarhistoria, { foreignKey: 'ClienteId', as: 'antecedentesheredofamiliares' });

Antecedenteheredofamiliarhistoria.belongsTo(Antecedenteheredofamiliar, { foreignKey: 'AntecedenteheredofamiliarId', as: 'antecedenteheredofamiliar' });
Antecedenteheredofamiliar.hasMany(Antecedenteheredofamiliarhistoria, { foreignKey: 'AntecedenteheredofamiliarId', as: 'historias' });

Antecedentenopatologicohistoria.belongsTo(Cliente, { foreignKey: 'ClienteId', as: 'cliente' });
Cliente.hasMany(Antecedentenopatologicohistoria, { foreignKey: 'ClienteId', as: 'antecedentesnopatologicos' });

Antecedentenopatologicohistoria.belongsTo(Antecedentenopatologico, { foreignKey: 'AntecedentenopatologicoId', as: 'antecedentenopatologico' });
Antecedentenopatologico.hasMany(Antecedentenopatologicohistoria, { foreignKey: 'AntecedentenopatologicoId', as: 'historias' });

Antecedentepatologicohistoria.belongsTo(Cliente, { foreignKey: 'ClienteId', as: 'cliente' });
Cliente.hasMany(Antecedentepatologicohistoria, { foreignKey: 'ClienteId', as: 'antecedentespatologicos' });

Antecedentepatologicohistoria.belongsTo(Antecedentepatologico, { foreignKey: 'AntecedentepatologicoId', as: 'antecedentepatologico' });
Antecedentepatologico.hasMany(Antecedentepatologicohistoria, { foreignKey: 'AntecedentepatologicoId', as: 'historias' });

module.exports = {
  sequelize,
  Tipo,
  Tipodos,
  Duracion,
  Diagnostico,
  Empresa,
  Especialidad,
  Antecedenteheredofamiliar,
  Antecedentenopatologico,
  Antecedentepatologico,
  Admin,
  Doctor,
  Cliente,
  Laboratorio,
  Laboratoriodos,
  ItemLaboratorio,
  Cartilla,
  Auditoria,
  Agendamiento,
  Especialista,
  Cita,
  Detallecita,
  Dermatomafrontal,
  Dermatomaposterior,
  Laboratoriodoscita,
  Analisis,
  Resultado,
  Examepaciente,
  Duracioncita,
  ItemCartilla,
  Antecedenteheredofamiliarhistoria,
  Antecedentenopatologicohistoria,
  Antecedentepatologicohistoria
};