import 'package:flutter_dotenv/flutter_dotenv.dart';

/// 기능 토글을 중앙에서 관리한다.
///
/// - `Environment.initialize` 후 `FeatureFlags.initialize()`가 호출되어야 한다.
/// - 백엔드의 `feature.*` 키와 기존 `FEATURE_*` 키를 모두 지원한다.
class FeatureFlags {
  FeatureFlags._();

  static final Map<String, bool> _values = {};

  /// 승인 화면 노출 여부.
  static bool get approvalsEnabled => _values['approvals_enabled'] ?? false;

  /// 재고 전표 화면 노출 여부.
  static bool get stockTransitionsEnabled =>
      _values['stock_transitions_enabled'] ?? false;

  /// Approval Flow v2 기능 토글.
  static bool get approvalFlowV2 => _values['approval_flow_v2'] ?? false;

  /// 기능 토글을 환경 변수에서 읽어 초기화한다.
  static void initialize() {
    _values
      ..clear()
      ..addAll({
        'approvals_enabled': _readFlag(
          'FEATURE_APPROVALS_ENABLED',
          defaultValue: false,
        ),
        'stock_transitions_enabled': _readFlag(
          'FEATURE_STOCK_TRANSITIONS_ENABLED',
          defaultValue: true,
        ),
        'approval_flow_v2': _readFlag(
          'FEATURE_APPROVAL_FLOW_V2',
          aliases: const [
            'feature.approval_flow_v2',
            'FEATURES_APPROVAL_FLOW_V2',
            'features.approval_flow_v2',
          ],
          defaultValue: false,
        ),
      });
  }

  /// 논리 키 기반으로 토글 값을 조회한다.
  static bool isEnabled(String logicalKey) =>
      _values[logicalKey.toLowerCase()] ?? false;

  static bool _readFlag(
    String key, {
    bool defaultValue = false,
    List<String> aliases = const [],
  }) {
    for (final candidate in <String>{key, ...aliases}) {
      final raw = dotenv.maybeGet(candidate);
      if (raw == null) {
        continue;
      }
      final normalized = raw.trim().toLowerCase();
      switch (normalized) {
        case '1':
        case 'y':
        case 'yes':
        case 'true':
          return true;
        case '0':
        case 'n':
        case 'no':
        case 'false':
          return false;
        default:
          continue;
      }
    }
    return defaultValue;
  }
}
