import dotenv from 'dotenv';

// Load environment variables from .env file
dotenv.config();

export interface TestConfig {
  // Application URL
  baseUrl: string;
  
  // Test credentials
  testEmail: string;
  testPassword: string;
  
  // Gmail configuration for 2FA
  gmailAppPassword?: string;
  gmailImapHost: string;
  gmailImapPort: number;
  gmailImapUser: string;
  gmailImapPassword?: string;
  
  // 2FA configuration
  twoFaMaxWaitTime: number;
  twoFaRetryInterval: number;
}

/**
 * Loads test configuration from environment variables with fallbacks
 */
export function loadTestConfig(): TestConfig {
  return {
    // Application URL
    baseUrl: process.env.SHOPFLOW_URL || 'https://shopflow.php8',
    
    // Test credentials
    testEmail: process.env.TEST_EMAIL || 'siliconkatalontest@gmail.com',
    testPassword: process.env.TEST_PASSWORD || 'o9s8b73y4vtol978mynsl!2ASD;',
    
    // Gmail configuration
    gmailAppPassword: process.env.GMAIL_APP_PASSWORD,
    gmailImapHost: process.env.GMAIL_IMAP_HOST || 'imap.gmail.com',
    gmailImapPort: parseInt(process.env.GMAIL_IMAP_PORT || '993'),
    gmailImapUser: process.env.GMAIL_IMAP_USER || 'siliconkatalontest@gmail.com',
    gmailImapPassword: process.env.GMAIL_IMAP_PASSWORD,
    
    // 2FA configuration
    twoFaMaxWaitTime: parseInt(process.env.TWO_FA_MAX_WAIT_TIME || '30000'),
    twoFaRetryInterval: parseInt(process.env.TWO_FA_RETRY_INTERVAL || '5000')
  };
}

/**
 * Validates that required configuration is present
 */
export function validateTestConfig(config: TestConfig): { valid: boolean; errors: string[] } {
  const errors: string[] = [];
  
  if (!config.baseUrl) {
    errors.push('SHOPFLOW_URL is required');
  }
  
  if (!config.testEmail) {
    errors.push('TEST_EMAIL is required');
  }
  
  if (!config.testPassword) {
    errors.push('TEST_PASSWORD is required');
  }
  
  // Gmail configuration is optional for 2FA automation
  if (config.gmailAppPassword && !config.gmailImapPassword) {
    config.gmailImapPassword = config.gmailAppPassword;
  }
  
  return {
    valid: errors.length === 0,
    errors
  };
}

/**
 * Gets the test configuration with validation
 */
export function getTestConfig(): TestConfig {
  const config = loadTestConfig();
  const validation = validateTestConfig(config);
  
  if (!validation.valid) {
    console.warn('Configuration validation warnings:');
    validation.errors.forEach(error => console.warn(`- ${error}`));
  }
  
  return config;
}

// Export default configuration
export const testConfig = getTestConfig();
