package main

import (
	"encoding/json"
	"fmt"
)

// translations 是英文到中文的键名映射
var translations = map[string]string{
	"SceneInformation":    "场景信息",
	"location":            "地点",
	"name":                "名称",
	"security":            "有保安",
	"client":              "客户",
	"appearance":          "外观",
	"attitude":            "对用户的态度",
	"personality":         "性格",
	"introduction":        "简介",
	"roleName":            "角色名",
	"opener":              "开场白",
	"promotion":           "推介项目",
	"projectDescription":  "项目介绍",
	"projectName":         "项目名",
	"username":            "用户名",
	"userBackground":      "用户背景信息",
	"CustomTraining":      "定制训练",
	"sceneRulesCustom":    "场景规则定制",
	"ruleOne":             "规则一",
	"ruleTwo":             "规则二",
	"ruleThree":           "规则三",
	"outcomeSet":          "结局集",
	"date":                "date",
	"id":                  "id",
	"result":              "result",
	"difficulty":          "难易程度",
	"AssessmentWeights":   "考核权重",
	"professionalism":     "专业程度",
	"adaptability":        "应变能力",
	"communicationSkills": "沟通能力",
	"socialEtiquette":     "社交礼仪",
}

// translateKeys 是递归函数，用于转换JSON对象的键
func translateKeys(data interface{}) interface{} {
	switch obj := data.(type) {
	case map[string]interface{}:
		newMap := make(map[string]interface{})
		for k, v := range obj {
			newKey := k
			if val, ok := translations[k]; ok {
				newKey = val
			}
			newMap[newKey] = translateKeys(v)
		}
		return newMap
	case []interface{}:
		for i, v := range obj {
			obj[i] = translateKeys(v)
		}
	}
	return data
}

func main() {
	jsonStr := `{
  "ConfigData": {
    "SceneInformation": {
      "location": {
        "name": "南京市移动办公大楼",
        "security": false
      },
      "client": [
        {
          "appearance": "和蔼可亲，穿着朴素",
          "attitude": "温和、耐心",
          "personality": "温和、耐心",
          "introduction": "来移动想要给家里办宽带的客户，赵文生，教育水平：中专，职业背景：退休\n - 目的性：家里要办宽带，来移动大厅想看看为家庭提供稳定的网络环境。\n已知信息：对宽带费用没概念，只知道自己要手机刷短视频快的，最好可以有话费套餐方便联系子女的，但是每个月预算不超过100元，在这个区间都是可以考虑的预算，对态度好的服务别有青睐。  \n知识库背景：\no对宽带的了解较少，主要用于观看电视、视频通话等。\no可能需要子女或工作人员的帮助来了解和使用宽带。\n3.消费心理预期：\no希望宽带费用不高，操作简单易懂。主要想依赖宽带，对通话和流量的要求不高，可有可无\no对网络速度的要求相对较低，主要关注稳定性。\n4.心理特征：\no目的性：与家人保持联系，丰富退休生活。\no心理活动预期：担心操作复杂，遇到问题时希望能得到及时的帮助。\n5.性格特征：\no决策风格：依赖他人的建议，比较保守。\no风险偏好：极低风险，追求稳定和安心。\no个性：节俭，注重实用性。\n6.服务偏好：\no偏好上门服务和面对面的指导。\no对客服的耐心和细心程度青睐程度较高。",
          "roleName": "赵文生"
        }
      ],
      "opener": "您的身份是南京移动的宽带业务经理，请以您专业的知识和热情的服务，开始您的营销任务，为他带来更加便捷和快速的互联网生活体验。坐在柜台对面的，是一位和蔼可亲，穿着朴素的南京市民，您正准备向他展开宽带业务的推广",
      "promotion": {
        "projectDescription": "面向个人或者企业提供高质量的宽带业务",
        "projectName": "南京移动宽带活动"
      },
      "username": "经理",
      "userBackground": "中国移动南京宽带业务经理"
    },
    "CustomTraining": {
      "sceneRulesCustom": {
        "ruleOne": "客户服务对所有客户的提问和反馈要及时响应，确保在24小时内回复，处理客户投诉时保持礼貌和耐心，积极解决问题并记录每个案例。提供清晰准确的信息，避免引起客户的混淆",
        "ruleThree": "数据保护：严格保密客户和公司的敏感信息，防止未经授权的访问和泄露。所有的电子数据必须备份，并采取适当的安全措施保护。遵守相关的数据保护法律和法规，例如GDPR。",
        "ruleTwo": "财务管理，所有的财务交易必须记录在案，确保账目清晰透明。严格遵守预算，不得擅自超支或改变用途。定期进行财务审计，确保没有违规行为。"
      },
      "outcomeSet": [
        {
          "date": "所有项目目标按时完成，超出预期表现",
          "id": 0,
          "result": "达成协议"
        },
        {
          "date": "项目目标基本达成，存在小幅度延迟",
          "id": 1,
          "result": "下次再议"
        },
        {
          "date": "项目目标未达成，表现不佳",
          "id": 2,
          "result": "遗憾收场"
        }
      ],
      "difficulty": "简单"
    },
    "AssessmentWeights": {
      "professionalism": "20",
      "adaptability": "40",
      "communicationSkills": "90",
      "socialEtiquette": "80"
    }
  }
}
`

	var data map[string]interface{}
	err := json.Unmarshal([]byte(jsonStr), &data)
	if err != nil {
		fmt.Println("Error parsing JSON:", err)
		return
	}

	// 转换键名
	translatedData := translateKeys(data)
	translatedJSON, err := json.MarshalIndent(translatedData, "", "    ")
	if err != nil {
		fmt.Println("Error marshalling JSON:", err)
		return
	}

	fmt.Println(string(translatedJSON))
}
