const { Pool } = require('pg');
const fs = require('fs');
const path = require('path');

const pool = new Pool({
  user: 'postgres',
  host: 'localhost',
  database: 'sistema_medico',
  password: '123',
  port: 5432,
});

exports.exportDataLiviana = async (req, res) => {
  try {
    const tables = [
      //// tablas indenependientes
      'Diagnostico', 'Empresa', 'Especialidad',
      'Antecedenteheredofamiliar', 'Antecedentenopatologico', 'Antecedentepatologico',
      'People', 'Admin', 'Doctor', 'Cliente', 'Especialista',
      'Tipos', 'Tipodos', 'Duracion'
    ];
    let completo = '';
    for (const table of tables) {
      try {
        const query = `SELECT * FROM public."${table}";`;
        const res = await pool.query(query);
        const data = res.rows.map(row => {
          const { ...rest } = row;
          return rest;
        });
        const filePath = path.join(__dirname, '../data/liviano', `${table}.json`);
        fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
        let datito = `Datos de ${table} exportados a ${filePath}`;
        console.log(datito);
        completo += datito + '\n';
      } catch (err) {
        console.error(`Error al exportar datos de ${table}:`, err);
      }
    }
    const resultado = completo;
    res.json({ message: resultado });
  } catch (error) {
    console.error('Error en exportDataLiviana:', error);
    res.status(500).json({ message: 'Error al exportar datos livianos' });
  }
};

exports.exportDataMediano = async (req, res) => {
  try {
    const tables = [
      //// tablas secundarias
      'Laboratorio', 'Laboratoriodos', 'ItemLaboratorio', 
      'Laboratoriodoscita', 'Analisis', 'Resultado', 
      'Examepaciente', 'Duracioncita',
      'Antecedenteheredofamiliarhistoria', 'Antecedentenopatologicohistoria', 
      'Antecedentepatologicohistoria',
    ];
    let completo = '';
    for (const table of tables) {
      try {
        const query = `SELECT * FROM public."${table}";`;
        const res = await pool.query(query);
        const data = res.rows.map(row => {
          const { ...rest } = row;
          return rest;
        });
        const filePath = path.join(__dirname, '../data/mediano', `${table}.json`);
        fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
        let datito = `Datos de ${table} exportados a ${filePath}`;
        console.log(datito);
        completo += datito + '\n';
      } catch (err) {
        console.error(`Error al exportar datos de ${table}:`, err);
      }
    }
    const resultado = completo;
    res.json({ message: resultado });
  } catch (error) {
    console.error('Error en exportDataLiviana:', error);
    res.status(500).json({ message: 'Error al exportar datos livianos' });
  }
};

exports.exportDataMasiva = async (req, res) => {
  try {
    const tables = [
      {
        name: 'Cita',
        fields: [
          'id', 'Appointment', 'Reason', 'Amount', 'Pay', 'Paymentstatus', 
          'Condition', 'Type', 'Referred', 'Companion', 'Relationship',
          'BloodPressure', 'HeartRate', 'BreathingFrequency', 'Temperature',
          'Saturation', 'SickTime', 'CurrentEpisode', 'StartWay',
          'SignsandSymptoms', 'DescriptionProblem', 'SurgicalHistory',
          'MedicalHistory', 'AllergicHistory', 'PhysicalExam', 'Diagnosis',
          'LaboratoryExam', 'Creatininevalue', 'Urea', 'ETS', 'Specifyothers',
          'Labamount', 'Labpay', 'Labpaymentstatus', 'Labstatus',
          'Labreceptiondate', 'Labresultdate', 'AgendaId', 'AdminId', 'ClienteId',
          'createdAt', 'updatedAt'
        ]
      },
      {
        name: 'Detallecita',
        fields: [
          'id', 'Othersduration', 'Startdate', 'Frequency', 'Datethatbecameimportant',
          'Perday', 'Perweek', 'Permonth', 'Byyear', 'Scale', 'Datescale',
          'Treatment', 'Observations', 'Protocol', 'Protocoltype', 'CitaId',
          'createdAt', 'updatedAt'
        ]
      },
      { name: 'Dermatomafrontal', fields: null },
      { name: 'Dermatomaposterior', fields: null }
    ];

    let completo = '';
    for (const table of tables) {
      try {
        let query;
        if (table.fields) {
          // Consulta con campos específicos
          const fieldsList = table.fields.map(f => `"${f}"`).join(', ');
          query = `SELECT ${fieldsList} FROM public."${table.name}";`;
        } else {
          // Consulta con todos los campos
          query = `SELECT * FROM public."${table.name}";`;
        }
        const result = await pool.query(query);
        const data = result.rows;
        const filePath = path.join(__dirname, '../data/masivo', `${table.name}.json`);
        fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
        let datito = `Datos de ${table.name} exportados a ${filePath}`;
        console.log(datito);
        completo += datito + '\n';
      } catch (err) {
        console.error(`Error al exportar datos de ${table.name}:`, err);
        completo += `Error en ${table.name}: ${err.message}\n`;
      }
    }
    res.json({ message: completo });
  } catch (error) {
    console.error('Error en exportDataMasiva:', error);
    res.status(500).json({ message: 'Error al exportar datos masivos' });
  }
};