import 'package:json_annotation/json_annotation.dart';

/// 词汇书主分类
enum VocabularyBookMainCategory {
  @JsonValue('academic_stage')
  academicStage, // 学段基础词汇
  
  @JsonValue('domestic_test')
  domesticTest, // 国内应试类词汇
  
  @JsonValue('international_test')
  internationalTest, // 出国考试类词汇
  
  @JsonValue('professional')
  professional, // 职业与专业类词汇
  
  @JsonValue('functional')
  functional, // 功能型词库
}

/// 学段基础词汇子分类
enum AcademicStageCategory {
  @JsonValue('primary_school')
  primarySchool, // 小学英语词汇
  
  @JsonValue('junior_high')
  juniorHigh, // 初中英语词汇
  
  @JsonValue('senior_high')
  seniorHigh, // 高中英语词汇
  
  @JsonValue('university')
  university, // 大学英语教材词汇
}

/// 国内应试类词汇子分类
enum DomesticTestCategory {
  @JsonValue('cet4')
  cet4, // 大学四级
  
  @JsonValue('cet6')
  cet6, // 大学六级
  
  @JsonValue('postgraduate')
  postgraduate, // 考研英语核心词汇
  
  @JsonValue('tem4')
  tem4, // 专四
  
  @JsonValue('tem8')
  tem8, // 专八
  
  @JsonValue('adult_bachelor')
  adultBachelor, // 专升本
  
  @JsonValue('doctoral')
  doctoral, // 考博词汇
  
  @JsonValue('pets')
  pets, // 全国等级考试英语词汇
  
  @JsonValue('self_study')
  selfStudy, // 成人本科/自考英语词汇
}

/// 出国考试类词汇子分类
enum InternationalTestCategory {
  @JsonValue('ielts_academic')
  ieltsAcademic, // 雅思学术类
  
  @JsonValue('ielts_general')
  ieltsGeneral, // 雅思培训类
  
  @JsonValue('toefl_ibt')
  toeflIbt, // 托福iBT
  
  @JsonValue('toeic')
  toeic, // 托业
  
  @JsonValue('gre')
  gre, // GRE
  
  @JsonValue('gmat')
  gmat, // GMAT
  
  @JsonValue('sat')
  sat, // SAT
  
  @JsonValue('ssat')
  ssat, // SSAT
  
  @JsonValue('act')
  act, // ACT
  
  @JsonValue('cambridge_ket')
  cambridgeKet, // 剑桥KET
  
  @JsonValue('cambridge_pet')
  cambridgePet, // 剑桥PET
  
  @JsonValue('cambridge_fce')
  cambridgeFce, // 剑桥FCE
  
  @JsonValue('cambridge_cae')
  cambridgeCae, // 剑桥CAE
  
  @JsonValue('cambridge_cpe')
  cambridgeCpe, // 剑桥CPE
}

/// 职业与专业类词汇子分类
enum ProfessionalCategory {
  @JsonValue('business_english')
  businessEnglish, // 商务英语
  
  @JsonValue('bec_preliminary')
  becPreliminary, // BEC初级
  
  @JsonValue('bec_vantage')
  becVantage, // BEC中级
  
  @JsonValue('bec_higher')
  becHigher, // BEC高级
  
  @JsonValue('mba')
  mba, // MBA
  
  @JsonValue('finance')
  finance, // 金融
  
  @JsonValue('accounting')
  accounting, // 会计
  
  @JsonValue('economics')
  economics, // 经济学
  
  @JsonValue('cpa')
  cpa, // CPA
  
  @JsonValue('cfa')
  cfa, // CFA
  
  @JsonValue('medical')
  medical, // 医学英语
  
  @JsonValue('legal')
  legal, // 法律英语
  
  @JsonValue('engineering')
  engineering, // 工程英语
  
  @JsonValue('computer_science')
  computerScience, // 计算机科学
  
  @JsonValue('artificial_intelligence')
  artificialIntelligence, // 人工智能
  
  @JsonValue('software_engineering')
  softwareEngineering, // 软件工程
  
  @JsonValue('academic_english')
  academicEnglish, // 学术英语(EAP)
  
  @JsonValue('aviation')
  aviation, // 航空
  
  @JsonValue('tourism')
  tourism, // 旅游
  
  @JsonValue('media')
  media, // 新闻传媒
}

/// 功能型词库子分类
enum FunctionalCategory {
  @JsonValue('roots_affixes')
  rootsAffixes, // 词根词缀词汇
  
  @JsonValue('synonyms_antonyms')
  synonymsAntonyms, // 同义词/反义词
  
  @JsonValue('daily_spoken_collocations')
  dailySpokenCollocations, // 日常口语常用搭配库
  
  @JsonValue('academic_spoken_collocations')
  academicSpokenCollocations, // 学术口语常用搭配库
  
  @JsonValue('academic_writing_collocations')
  academicWritingCollocations, // 学术写作常用搭配库
  
  @JsonValue('daily_life_english')
  dailyLifeEnglish, // 日常生活英语
  
  @JsonValue('travel_english')
  travelEnglish, // 旅游英语
  
  @JsonValue('dining_english')
  diningEnglish, // 点餐英语
  
  @JsonValue('shopping_english')
  shoppingEnglish, // 购物英语
  
  @JsonValue('transportation_english')
  transportationEnglish, // 出行英语
  
  @JsonValue('housing_english')
  housingEnglish, // 租房英语
}

/// 词汇书分类工具类
class VocabularyBookCategoryHelper {
  /// 获取主分类的中文名称
  static String getMainCategoryName(VocabularyBookMainCategory category) {
    switch (category) {
      case VocabularyBookMainCategory.academicStage:
        return '学段基础词汇';
      case VocabularyBookMainCategory.domesticTest:
        return '国内应试类词汇';
      case VocabularyBookMainCategory.internationalTest:
        return '出国考试类词汇';
      case VocabularyBookMainCategory.professional:
        return '职业与专业类词汇';
      case VocabularyBookMainCategory.functional:
        return '功能型词库';
    }
  }

  /// 获取学段基础词汇子分类的中文名称
  static String getAcademicStageCategoryName(AcademicStageCategory category) {
    switch (category) {
      case AcademicStageCategory.primarySchool:
        return '小学英语词汇';
      case AcademicStageCategory.juniorHigh:
        return '初中英语词汇';
      case AcademicStageCategory.seniorHigh:
        return '高中英语词汇';
      case AcademicStageCategory.university:
        return '大学英语教材词汇';
    }
  }

  /// 获取国内应试类词汇子分类的中文名称
  static String getDomesticTestCategoryName(DomesticTestCategory category) {
    switch (category) {
      case DomesticTestCategory.cet4:
        return '大学四级(CET-4)';
      case DomesticTestCategory.cet6:
        return '大学六级(CET-6)';
      case DomesticTestCategory.postgraduate:
        return '考研英语核心词汇';
      case DomesticTestCategory.tem4:
        return '专四(TEM-4)';
      case DomesticTestCategory.tem8:
        return '专八(TEM-8)';
      case DomesticTestCategory.adultBachelor:
        return '专升本词汇';
      case DomesticTestCategory.doctoral:
        return '考博词汇';
      case DomesticTestCategory.pets:
        return '全国等级考试英语词汇';
      case DomesticTestCategory.selfStudy:
        return '成人本科/自考英语词汇';
    }
  }

  /// 获取出国考试类词汇子分类的中文名称
  static String getInternationalTestCategoryName(InternationalTestCategory category) {
    switch (category) {
      case InternationalTestCategory.ieltsAcademic:
        return '雅思学术类(IELTS Academic)';
      case InternationalTestCategory.ieltsGeneral:
        return '雅思培训类(IELTS General)';
      case InternationalTestCategory.toeflIbt:
        return '托福(TOEFL iBT)';
      case InternationalTestCategory.toeic:
        return '托业(TOEIC)';
      case InternationalTestCategory.gre:
        return 'GRE词汇';
      case InternationalTestCategory.gmat:
        return 'GMAT词汇';
      case InternationalTestCategory.sat:
        return 'SAT词汇';
      case InternationalTestCategory.ssat:
        return 'SSAT词汇';
      case InternationalTestCategory.act:
        return 'ACT词汇';
      case InternationalTestCategory.cambridgeKet:
        return '剑桥KET';
      case InternationalTestCategory.cambridgePet:
        return '剑桥PET';
      case InternationalTestCategory.cambridgeFce:
        return '剑桥FCE';
      case InternationalTestCategory.cambridgeCae:
        return '剑桥CAE';
      case InternationalTestCategory.cambridgeCpe:
        return '剑桥CPE';
    }
  }

  /// 获取职业与专业类词汇子分类的中文名称
  static String getProfessionalCategoryName(ProfessionalCategory category) {
    switch (category) {
      case ProfessionalCategory.businessEnglish:
        return '商务英语';
      case ProfessionalCategory.becPreliminary:
        return 'BEC初级';
      case ProfessionalCategory.becVantage:
        return 'BEC中级';
      case ProfessionalCategory.becHigher:
        return 'BEC高级';
      case ProfessionalCategory.mba:
        return 'MBA词汇';
      case ProfessionalCategory.finance:
        return '金融词汇';
      case ProfessionalCategory.accounting:
        return '会计词汇';
      case ProfessionalCategory.economics:
        return '经济学词汇';
      case ProfessionalCategory.cpa:
        return 'CPA词汇';
      case ProfessionalCategory.cfa:
        return 'CFA词汇';
      case ProfessionalCategory.medical:
        return '医学英语';
      case ProfessionalCategory.legal:
        return '法律英语';
      case ProfessionalCategory.engineering:
        return '工程英语';
      case ProfessionalCategory.computerScience:
        return '计算机科学';
      case ProfessionalCategory.artificialIntelligence:
        return '人工智能';
      case ProfessionalCategory.softwareEngineering:
        return '软件工程';
      case ProfessionalCategory.academicEnglish:
        return '学术英语(EAP)';
      case ProfessionalCategory.aviation:
        return '航空英语';
      case ProfessionalCategory.tourism:
        return '旅游英语';
      case ProfessionalCategory.media:
        return '新闻传媒英语';
    }
  }

  /// 获取功能型词库子分类的中文名称
  static String getFunctionalCategoryName(FunctionalCategory category) {
    switch (category) {
      case FunctionalCategory.rootsAffixes:
        return '词根词缀词汇';
      case FunctionalCategory.synonymsAntonyms:
        return '同义词/反义词';
      case FunctionalCategory.dailySpokenCollocations:
        return '日常口语常用搭配库';
      case FunctionalCategory.academicSpokenCollocations:
        return '学术口语常用搭配库';
      case FunctionalCategory.academicWritingCollocations:
        return '学术写作常用搭配库';
      case FunctionalCategory.dailyLifeEnglish:
        return '日常生活英语';
      case FunctionalCategory.travelEnglish:
        return '旅游英语';
      case FunctionalCategory.diningEnglish:
        return '点餐英语';
      case FunctionalCategory.shoppingEnglish:
        return '购物英语';
      case FunctionalCategory.transportationEnglish:
        return '出行英语';
      case FunctionalCategory.housingEnglish:
        return '租房英语';
    }
  }

  /// 根据主分类获取对应的子分类列表
  static List<String> getSubCategories(VocabularyBookMainCategory mainCategory) {
    switch (mainCategory) {
      case VocabularyBookMainCategory.academicStage:
        return AcademicStageCategory.values.map((e) => getAcademicStageCategoryName(e)).toList();
      case VocabularyBookMainCategory.domesticTest:
        return DomesticTestCategory.values.map((e) => getDomesticTestCategoryName(e)).toList();
      case VocabularyBookMainCategory.internationalTest:
        return InternationalTestCategory.values.map((e) => getInternationalTestCategoryName(e)).toList();
      case VocabularyBookMainCategory.professional:
        return ProfessionalCategory.values.map((e) => getProfessionalCategoryName(e)).toList();
      case VocabularyBookMainCategory.functional:
        return FunctionalCategory.values.map((e) => getFunctionalCategoryName(e)).toList();
    }
  }

  /// 从中文名称映射到主分类枚举
  static VocabularyBookMainCategory? getMainCategoryFromName(String? categoryName) {
    if (categoryName == null) return null;
    
    switch (categoryName) {
      case '学段基础词汇':
        return VocabularyBookMainCategory.academicStage;
      case '国内应试类词汇':
        return VocabularyBookMainCategory.domesticTest;
      case '出国考试类词汇':
        return VocabularyBookMainCategory.internationalTest;
      case '职业与专业类词汇':
        return VocabularyBookMainCategory.professional;
      case '功能型词库':
        return VocabularyBookMainCategory.functional;
      default:
        return null;
    }
  }
}