import { Sequelize } from "sequelize";
import { ObtenerCredenciales } from "./utils/Credenciales.js";
import dotenv from 'dotenv';
const solicitud = {
    data: [
        { dbmane: 'aplicaciones' },
        { dbmane: 'sial_help' }
    ]
};
let configPromise = null;
async function getConfig() {
    if (!configPromise) {
        configPromise = ObtenerCredenciales(solicitud, process.env.SECRET_CACHE_KEY);
    }
    return configPromise;
}

// Configura dotenv
dotenv.config({ path: '../.env' });
dotenv.config();
const config = await getConfig();
const dablog = config.aplicaciones;
const dabasistente = config.asistente_qa;

const dbcentral = new Sequelize(
    dablog.name,
    dablog.username,
    dablog.password,
    {
        host: dablog.dns,
        dialect: "mysql",
        port: dablog.puerto,
        define: {
            freezeTableName: true
        },
        pool: {
            max: 5,           // máximo de conexiones en el pool
            min: 0,           // mínimo de conexiones en el pool
            acquire: 30000,   // tiempo máximo para obtener una conexión (30 segundos)
            idle: 10000       // tiempo máximo que una conexión puede estar inactiva (10 segundos)
        },
        dialectOptions: {
            connectTimeout: 10000, // timeout de conexión (10 segundos)
            // Configuración adicional para mejorar el rendimiento
            supportBigNumbers: true,
            bigNumberStrings: true,
            dateStrings: true,
            typeCast: true
        },
        logging: false // desactivar logs SQL para mejorar rendimiento
    }
);

const dbasistente = new Sequelize(
    dabasistente.name,
    dabasistente.username,
    dabasistente.password,
    {
        host: dabasistente.dns,
        dialect: "mysql",
        port: dabasistente.puerto,
        define: {
            freezeTableName: true
        },
        pool: {
            max: 5,           // máximo de conexiones en el pool
            min: 0,           // mínimo de conexiones en el pool
            acquire: 30000,   // tiempo máximo para obtener una conexión (30 segundos)
            idle: 10000       // tiempo máximo que una conexión puede estar inactiva (10 segundos)
        },
        dialectOptions: {
            connectTimeout: 10000, // timeout de conexión (10 segundos)
            // Configuración adicional para mejorar el rendimiento
            supportBigNumbers: true,
            bigNumberStrings: true,
            dateStrings: true,
            typeCast: true
        },
        logging: false // desactivar logs SQL para mejorar rendimiento
    }
);

// Verificar conexión
dbcentral.authenticate()
    .then(() => console.log('Conexión a la base de datos central establecida correctamente.'))
    .catch(err => console.error('Error al conectar con la base de datos central:', err));

dbasistente.authenticate()
    .then(() => console.log('Conexión a la base de datos central establecida correctamente.'))
    .catch(err => console.error('Error al conectar con la base de datos central:', err));


export { dbcentral, dbasistente };
