import 'package:flutter/material.dart';
/// EN (default) / ZH / JA
enum AppLang { en, zh, ja }

class L10n {
  final AppLang lang;
  const L10n(this.lang);

  static const _t = <String, Map<AppLang, String>>{
    'appTitle': {
      AppLang.en: 'Key Resonance Destiny',
      AppLang.zh: '键共振命理',
      AppLang.ja: '鍵共振命理',
    },
    'subtitle': {
      AppLang.en: 'GanZhi judgment · resonance · entanglement',
      AppLang.zh: '干支判局 · 共振 · 纠缠',
      AppLang.ja: '干支判局 · 共振 · もつれ',
    },
    'newAnalysis': {
      AppLang.en: 'New Analysis',
      AppLang.zh: '新建判局',
      AppLang.ja: '新規分析',
    },
    'tutorial': {
      AppLang.en: 'Tutorial',
      AppLang.zh: '教程',
      AppLang.ja: 'チュートリアル',
    },
    'privacy': {
      AppLang.en: 'Privacy Policy',
      AppLang.zh: '隐私政策',
      AppLang.ja: 'プライバシー',
    },
    'name': {
      AppLang.en: 'Name',
      AppLang.zh: '姓名',
      AppLang.ja: '氏名',
    },
    'gender': {
      AppLang.en: 'Gender',
      AppLang.zh: '性别',
      AppLang.ja: '性別',
    },
    'male': {
      AppLang.en: 'Male',
      AppLang.zh: '男',
      AppLang.ja: '男',
    },
    'female': {
      AppLang.en: 'Female',
      AppLang.zh: '女',
      AppLang.ja: '女',
    },
    'birthTime': {
      AppLang.en: 'Birth date & time (local)',
      AppLang.zh: '出生当地时间',
      AppLang.ja: '出生現地時刻',
    },
    'place': {
      AppLang.en: 'Birth place',
      AppLang.zh: '出生地点',
      AppLang.ja: '出生地',
    },
    'longitude': {
      AppLang.en: 'Longitude',
      AppLang.zh: '经度',
      AppLang.ja: '経度',
    },
    'latitude': {
      AppLang.en: 'Latitude',
      AppLang.zh: '纬度',
      AppLang.ja: '緯度',
    },
    'generate': {
      AppLang.en: 'Generate Report',
      AppLang.zh: '生成判局报告',
      AppLang.ja: 'レポート生成',
    },
    'unlock': {
      AppLang.en: 'Unlock full report (Stripe)',
      AppLang.zh: '解锁完整报告（Stripe）',
      AppLang.ja: 'フルレポート解除（Stripe）',
    },
    'accuracy': {
      AppLang.en: 'Max accuracy 80% (531 theory)',
      AppLang.zh: '最高准确率80%（531理论）',
      AppLang.ja: '最高精度80%（531理論）',
    },
    'copyright': {
      AppLang.en: '© 2026 Jason Li. All rights reserved.',
      AppLang.zh: '© 2026 Jason Li. All rights reserved.',
      AppLang.ja: '© 2026 Jason Li. All rights reserved.',
    },
    'report': {
      AppLang.en: 'Judgment Report',
      AppLang.zh: '判局报告',
      AppLang.ja: '判局レポート',
    },
    'crossChart': {
      AppLang.en: 'Cross-Chart Resonance',
      AppLang.zh: '跨命局键共振',
      AppLang.ja: '跨命局キー共振',
    },
    'cases': {
      AppLang.en: 'Case Verification',
      AppLang.zh: '案例验证',
      AppLang.ja: '事例検証',
    },
    'compare': {
      AppLang.en: 'Compare',
      AppLang.zh: '开始比较',
      AppLang.ja: '比較する',
    },
    'personA': {
      AppLang.en: 'Person A',
      AppLang.zh: '命局甲',
      AppLang.ja: '命局A',
    },
    'personB': {
      AppLang.en: 'Person B',
      AppLang.zh: '命局乙',
      AppLang.ja: '命局B',
    },
  };

  String call(String key) => _t[key]?[lang] ?? key;

  String cityName(String en, String zh, String ja) {
    switch (lang) {
      case AppLang.zh:
        return zh;
      case AppLang.ja:
        return ja;
      case AppLang.en:
        return en;
    }
  }
}

class LangScope extends InheritedWidget {
  final L10n l10n;
  final ValueChanged<AppLang> onChanged;

  const LangScope({
    super.key,
    required this.l10n,
    required this.onChanged,
    required super.child,
  });

  static LangScope of(BuildContext context) =>
      context.dependOnInheritedWidgetOfExactType<LangScope>()!;

  @override
  bool updateShouldNotify(LangScope oldWidget) =>
      l10n.lang != oldWidget.l10n.lang;
}
