const { Sequelize } = require("sequelize");

// Load environment variables based on NODE_ENV
// This ensures variables are available for both CLI and programmatic usage
if (!process.env.DB_NAME && process.env.NODE_ENV) {
  const dotenv = require("dotenv");
  const envFile = `.env.${process.env.NODE_ENV}`;
  const result = dotenv.config({ path: envFile });
  if (result.error && process.env.NODE_ENV !== "production") {
    console.warn(
      `Warning: Could not load ${envFile}, using existing environment variables`
    );
  }
}

// Database configuration object
// Used by both Sequelize CLI and programmatic initialization
const dbConfig = {
  username: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  host: process.env.DB_HOST,
  port: process.env.DB_PORT || 5432,
  dialect: "postgres",
  logging: false,
  pool: {
    max: 5,
    min: 0,
    acquire: 10000,
    idle: 10000,
  },
};

// Configuration for Sequelize CLI (supports multiple environments)
// All environments use the same configuration from environment variables
const cliConfig = {
  dev: dbConfig,
  test: dbConfig,
  qa: dbConfig,
  production: dbConfig,
  prod: dbConfig,
};

// Create Sequelize instance for programmatic use
const sequelize = new Sequelize(
  dbConfig.database,
  dbConfig.username,
  dbConfig.password,
  {
    host: dbConfig.host,
    port: dbConfig.port,
    dialect: dbConfig.dialect,
    logging: dbConfig.logging,
    pool: dbConfig.pool,
  }
);

// Export the sequelize instance as default (for backward compatibility)
// Also export all environment configs for Sequelize CLI
module.exports = sequelize;
Object.assign(module.exports, cliConfig);
