import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter/foundation.dart';

/// 환경 설정 관리 클래스
class Environment {
  static const String dev = 'development';
  static const String prod = 'production';
  
  static late String _environment;
  
  /// 현재 환경
  static String get current => _environment;
  
  /// 개발 환경 여부
  static bool get isDevelopment => _environment == dev;
  
  /// 프로덕션 환경 여부
  static bool get isProduction => _environment == prod;
  
  /// API 베이스 URL
  static String get apiBaseUrl {
    try {
      return dotenv.env['API_BASE_URL'] ?? 'http://43.201.34.104:8080/api/v1';
    } catch (e) {
      // dotenv가 초기화되지 않은 경우 기본값 반환
      return 'http://43.201.34.104:8080/api/v1';
    }
  }
  
  /// API 타임아웃 (밀리초)
  static int get apiTimeout {
    try {
      final timeoutStr = dotenv.env['API_TIMEOUT'] ?? '60000';
      return int.tryParse(timeoutStr) ?? 60000;
    } catch (e) {
      return 60000;
    }
  }
  
  /// 로깅 활성화 여부
  static bool get enableLogging {
    try {
      final loggingStr = dotenv.env['ENABLE_LOGGING'] ?? 'false';
      return loggingStr.toLowerCase() == 'true';
    } catch (e) {
      return true; // 테스트 환경에서는 기본적으로 로깅 활성화
    }
  }
  
  /// API 사용 여부 (Mock 서비스 제거로 항상 true)
  static bool get useApi => true;
  
  /// 환경 초기화
  static Future<void> initialize([String? environment]) async {
    _environment = environment ?? 
        const String.fromEnvironment('ENVIRONMENT', defaultValue: dev);
    
    final envFile = _getEnvFile();
    if (kDebugMode) {
      debugPrint('[Environment] 환경 초기화 중...');
      debugPrint('[Environment] 현재 환경: $_environment');
      debugPrint('[Environment] 환경 파일: $envFile');
    }
    
    try {
      await dotenv.load(fileName: envFile);
      if (kDebugMode) {
        debugPrint('[Environment] 환경 파일 로드 성공');
        
        // 모든 환경 변수 출력
        debugPrint('[Environment] 로드된 환경 변수:');
        dotenv.env.forEach((key, value) {
          debugPrint('[Environment]   $key: $value');
        });
        
        debugPrint('[Environment] --- 설정 값 확인 ---');
        debugPrint('[Environment] API Base URL: ${dotenv.env['API_BASE_URL'] ?? '설정되지 않음'}');
        debugPrint('[Environment] API Timeout: ${dotenv.env['API_TIMEOUT'] ?? '설정되지 않음'}');
        debugPrint('[Environment] 로깅 활성화: ${dotenv.env['ENABLE_LOGGING'] ?? '설정되지 않음'}');
      }
    } catch (e) {
      if (kDebugMode) {
        debugPrint('[Environment] ⚠️ 환경 파일 로드 실패: $envFile');
        debugPrint('[Environment] 에러 상세: $e');
        debugPrint('[Environment] 기본값을 사용합니다.');
      }
      // .env 파일이 없어도 계속 진행
    }
  }
  
  /// 환경별 파일 경로 반환
  static String _getEnvFile() {
    switch (_environment) {
      case prod:
        return '.env.production';
      case dev:
      default:
        return '.env.development';
    }
  }
  
  /// 환경 변수 가져오기
  static String? get(String key) {
    return dotenv.env[key];
  }
  
  /// 환경 변수 존재 여부 확인
  static bool has(String key) {
    return dotenv.env.containsKey(key);
  }
}