import { config } from 'dotenv';
import logger from './logger';

// Load environment variables
config();

interface DatabaseConfig {
  [key: string]: {
    client: string;
    connection: {
      host: string;
      port: number;
      user: string;
      password: string;
      database: string;
    };
    pool: {
      min: number;
      max: number;
    };
    migrations: {
      directory: string;
      tableName: string;
    };
    seeds: {
      directory: string;
    };
    debug: boolean;
  };
}

const databaseConfig: DatabaseConfig = {
  development: {
    client: 'pg',
    connection: {
      host: process.env.DB_HOST || 'localhost',
      port: parseInt(process.env.DB_PORT || '5432'),
      user: process.env.DB_USER || 'postgres',
      password: process.env.DB_PASSWORD || 'postgres',
      database: process.env.DB_NAME || 'pos_dashboard_dev'
    },
    pool: {
      min: 2,
      max: 10
    },
    migrations: {
      directory: './src/infrastructure/database/migrations',
      tableName: 'knex_migrations'
    },
    seeds: {
      directory: './src/infrastructure/database/seeds'
    },
    debug: process.env.DB_DEBUG === 'true'
  },
  test: {
    client: 'pg',
    connection: {
      host: process.env.TEST_DB_HOST || 'localhost',
      port: parseInt(process.env.TEST_DB_PORT || '5432'),
      user: process.env.TEST_DB_USER || 'postgres',
      password: process.env.TEST_DB_PASSWORD || 'postgres',
      database: process.env.TEST_DB_NAME || 'restaurant_pos_test'
    },
    pool: {
      min: 2,
      max: 10
    },
    migrations: {
      directory: './src/infrastructure/database/migrations',
      tableName: 'knex_migrations'
    },
    seeds: {
      directory: './src/infrastructure/database/seeds'
    },
    debug: false
  },
  production: {
    client: 'pg',
    connection: {
      host: process.env.DB_HOST || '',
      port: parseInt(process.env.DB_PORT || '5432'),
      user: process.env.DB_USER || '',
      password: process.env.DB_PASSWORD || '',
      database: process.env.DB_NAME || '',
    },
    pool: {
      min: 2,
      max: 20
    },
    migrations: {
      directory: './src/infrastructure/database/migrations',
      tableName: 'knex_migrations'
    },
    seeds: {
      directory: './src/infrastructure/database/seeds'
    },
    debug: false
  }
};

const environment = process.env.NODE_ENV || 'development';
logger.info(`Using database configuration for ${environment} environment`);

export default databaseConfig[environment];
