package kb

import "github.com/tidbcloud/AgentTeam/presets"

// repositoryLabel describes one locale-specific label owned by a KB source
// repository taxonomy.
type repositoryLabel struct {
	Key         string
	Name        string
	Color       string
	Description string
}

type repositoryLabelDefinition struct {
	Key          string
	Color        string
	English      string
	EnglishDesc  string
	Chinese      string
	ChineseDesc  string
	Japanese     string
	JapaneseDesc string
}

var codebaseLabelDefinitions = []repositoryLabelDefinition{
	{Key: "architecture", Color: "0969da", English: "architecture", EnglishDesc: "System design, component structure, and design decisions.", Chinese: "架构", ChineseDesc: "系统设计、组件结构和设计决策。", Japanese: "アーキテクチャ", JapaneseDesc: "システム設計、コンポーネント構造、設計判断。"},
	{Key: "api", Color: "bf3989", English: "api", EnglishDesc: "API design, endpoints, and protocol definitions.", Chinese: "接口", ChineseDesc: "API 设计、端点和协议定义。", Japanese: "API", JapaneseDesc: "API設計、エンドポイント、プロトコル定義。"},
	{Key: "bug", Color: "d93f0b", English: "bug", EnglishDesc: "Known defects, issues, and workarounds.", Chinese: "缺陷", ChineseDesc: "已知缺陷、问题和临时方案。", Japanese: "バグ", JapaneseDesc: "既知の不具合、問題、回避策。"},
	{Key: "feature", Color: "0e8a16", English: "feature", EnglishDesc: "Feature requirements, enhancements, and specifications.", Chinese: "功能", ChineseDesc: "功能需求、增强和规格说明。", Japanese: "機能", JapaneseDesc: "機能要件、拡張、仕様。"},
	{Key: "refactor", Color: "fbca04", English: "refactor", EnglishDesc: "Code improvements, technical debt, and cleanup.", Chinese: "重构", ChineseDesc: "代码改进、技术债务和清理。", Japanese: "リファクタリング", JapaneseDesc: "コード改善、技術的負債、クリーンアップ。"},
	{Key: "dependency", Color: "c5def5", English: "dependency", EnglishDesc: "Dependency management, version upgrades, and compatibility.", Chinese: "依赖", ChineseDesc: "依赖管理、版本升级和兼容性。", Japanese: "依存関係", JapaneseDesc: "依存関係管理、バージョンアップグレード、互換性。"},
	{Key: "testing", Color: "1d76db", English: "testing", EnglishDesc: "Test plans, test cases, and quality assurance.", Chinese: "测试", ChineseDesc: "测试计划、用例和质量保障。", Japanese: "テスト", JapaneseDesc: "テスト計画、テストケース、品質保証。"},
	{Key: "deployment", Color: "5319e7", English: "deployment", EnglishDesc: "CI/CD, releases, and infrastructure operations.", Chinese: "部署", ChineseDesc: "CI/CD、发布和基础设施运维。", Japanese: "デプロイ", JapaneseDesc: "CI/CD、リリース、インフラ運用。"},
	{Key: "security", Color: "d93f0b", English: "security", EnglishDesc: "Security vulnerabilities, compliance, and authentication.", Chinese: "安全", ChineseDesc: "安全漏洞、合规和认证授权。", Japanese: "セキュリティ", JapaneseDesc: "セキュリティ脆弱性、コンプライアンス、認証認可。"},
	{Key: "performance", Color: "bfdadc", English: "performance", EnglishDesc: "Performance optimization, profiling, and benchmarks.", Chinese: "性能", ChineseDesc: "性能优化、分析和基准测试。", Japanese: "パフォーマンス", JapaneseDesc: "パフォーマンス最適化、プロファイリング、ベンチマーク。"},
}

var fileRepositoryLabelDefinitions = []repositoryLabelDefinition{
	{Key: "document", Color: "0969da", English: "document", EnglishDesc: "General documents, reports, and papers.", Chinese: "文档", ChineseDesc: "通用文档、报告和论文。", Japanese: "ドキュメント", JapaneseDesc: "一般文書、レポート、論文。"},
	{Key: "guide", Color: "0e8a16", English: "guide", EnglishDesc: "How-to guides, tutorials, manuals, and onboarding.", Chinese: "指南", ChineseDesc: "操作指南、教程、手册和新人引导。", Japanese: "ガイド", JapaneseDesc: "ハウツーガイド、チュートリアル、マニュアル、オンボーディング。"},
	{Key: "policy", Color: "5319e7", English: "policy", EnglishDesc: "Rules, standards, and compliance documents.", Chinese: "政策", ChineseDesc: "规章制度、标准和合规文档。", Japanese: "ポリシー", JapaneseDesc: "規則、標準、コンプライアンス文書。"},
	{Key: "meeting", Color: "fbca04", English: "meeting", EnglishDesc: "Meeting minutes, agendas, and resolutions.", Chinese: "会议", ChineseDesc: "会议纪要、议程和决议。", Japanese: "会議", JapaneseDesc: "議事録、アジェンダ、決議。"},
	{Key: "research", Color: "bf3989", English: "research", EnglishDesc: "Research analysis, investigation reports, and surveys.", Chinese: "调研", ChineseDesc: "研究分析、调查报告。", Japanese: "リサーチ", JapaneseDesc: "調査分析、調査レポート。"},
	{Key: "specification", Color: "1d76db", English: "specification", EnglishDesc: "Technical specifications, requirements, and design documents.", Chinese: "规格", ChineseDesc: "技术规格、需求文档和设计文档。", Japanese: "仕様", JapaneseDesc: "技術仕様、要件文書、設計文書。"},
	{Key: "reference", Color: "bfdadc", English: "reference", EnglishDesc: "Reference materials, glossaries, and data sheets.", Chinese: "参考", ChineseDesc: "参考资料、术语表和数据手册。", Japanese: "リファレンス", JapaneseDesc: "参考資料、用語集、データシート。"},
	{Key: "draft", Color: "f9d0c4", English: "draft", EnglishDesc: "Work in progress, drafts, and proposals.", Chinese: "草稿", ChineseDesc: "进行中的工作、草案和提案。", Japanese: "ドラフト", JapaneseDesc: "進行中の作業、草案、提案。"},
	{Key: "review", Color: "c5def5", English: "review", EnglishDesc: "Review comments, feedback, and approvals.", Chinese: "评审", ChineseDesc: "评审意见、反馈和签批。", Japanese: "レビュー", JapaneseDesc: "レビューコメント、フィードバック、承認。"},
	{Key: "archive", Color: "d93f0b", English: "archive", EnglishDesc: "Archived and deprecated historical content.", Chinese: "归档", ChineseDesc: "已归档、已废弃的历史内容。", Japanese: "アーカイブ", JapaneseDesc: "アーカイブ済み、非推奨の履歴コンテンツ。"},
}

func codebaseRepositoryLabels(locale string) []repositoryLabel {
	out := make([]repositoryLabel, 0, len(codebaseLabelDefinitions))
	for _, def := range codebaseLabelDefinitions {
		out = append(out, labelFromDefinition(def, locale))
	}
	return out
}

func fileRepositoryLabels(locale string) []repositoryLabel {
	out := make([]repositoryLabel, 0, len(fileRepositoryLabelDefinitions))
	for _, def := range fileRepositoryLabelDefinitions {
		out = append(out, labelFromDefinition(def, locale))
	}
	return out
}

func labelFromDefinition(def repositoryLabelDefinition, locale string) repositoryLabel {
	label := repositoryLabel{Key: def.Key, Color: def.Color}
	switch presets.NormalizeLocale(locale) {
	case presets.LocaleSimplifiedChinese:
		label.Name = def.Chinese
		label.Description = def.ChineseDesc
	case presets.LocaleJapanese:
		label.Name = def.Japanese
		label.Description = def.JapaneseDesc
	default:
		label.Name = def.English
		label.Description = def.EnglishDesc
	}
	return label
}
