package com.kexue.skills.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * 去除/还原字符串中转义字符的工具类
 */
public class EscapeCharacterUtils {
    // 定义Java常见转义字符映射（键：转义符，值：原字符）
    private static final Map<String, String> ESCAPE_MAP = new HashMap<>();

    static {
        // 基础转义字符
        ESCAPE_MAP.put("\\n", "\n");    // 换行符
        ESCAPE_MAP.put("\\t", "\t");    // 制表符
        ESCAPE_MAP.put("\\r", "\r");    // 回车符
        ESCAPE_MAP.put("\\\\", "\\");   // 反斜杠本身
        ESCAPE_MAP.put("\\\"", "\"");   // 双引号
        ESCAPE_MAP.put("\\'", "'");     // 单引号
        ESCAPE_MAP.put("\\b", "\b");    // 退格符
        ESCAPE_MAP.put("\\f", "\f");    // 换页符
    }

    /**
     * 去除/还原字符串中的转义字符
     * @param input 包含转义字符的字符串
     * @param removeMode true=直接删除转义符（如"\n"→""），false=还原为原字符（如"\n"→换行符）
     * @return 处理后的字符串
     */
    public static String removeEscapeCharacters(String input, boolean removeMode) {
        // 空值校验
        if (input == null || input.isEmpty()) {
            return input;
        }

        String result = input;
        // 遍历替换所有转义字符
        for (Map.Entry<String, String> entry : ESCAPE_MAP.entrySet()) {
            String escapeChar = entry.getKey();
            String targetChar = removeMode ? "" : entry.getValue();
            result = result.replace(escapeChar, targetChar);
        }

        return result;
    }

    // 重载方法：默认还原为原字符（非删除模式）
    public static String removeEscapeCharacters(String input) {
        return removeEscapeCharacters(input, false);
    }

    // 测试示例
    public static void main(String[] args) {
        // 测试字符串
        String testStr = "```yaml\\ntype: directory\\nname: skills\\ncontent:\\n  children:\\n    - type: file\\n      name: skills.md\\n      content: |\\n        # 智能工作总结\\n\\n        ## 技能描述\\n        该技能能够根据用户输入的工作内容、项目成果、个人成长等信息，自动生成结构清晰、内容完整的工作总结报告。\\n\\n        ## 技能标签\\n        办公演示，文档标准\\n\\n        ## 技能摘要\\n        帮助用户快速、高效地完成工作总结的撰写，提升报告的专业性和规范性，节省大量时间和精力。\\n\\n        ## 使用说明\\n        1.  用户提供详细的工作内容、项目成果、个人成长等信息。\\n        2.  技能将自动分析信息，提取关键点。\\n        3.  生成结构化的总结报告草稿。\\n        4.  用户可对草稿进行审阅和微调。\\n\\n        ## 输入参数\\n        -   `work_content` (字符串): 详细描述日常工作职责与完成的任务。\\n        -   `project_achievements` (字符串): 描述参与的项目及其取得的成果、个人贡献。\\n        -   `personal_growth` (字符串): 描述在技能、知识、协作等方面的进步与收获。\\n        -   `period` (字符串，可选): 总结覆盖的时间段，如“2024年第一季度”。默认为“近期”。\\n        -   `report_style` (字符串，可选): 报告风格，可选“正式”、“简洁”、“详细”。默认为“正式”。\\n\\n        ## 输出结果\\n        一个结构清晰、语言通顺的工作总结报告文本。\\n\\n        ## 示例\\n        **输入:**\\n        - work_content: “负责客户需求分析，撰写产品需求文档；参与每周迭代评审会。”\\n        - project_achievements: “主导了‘智能报表模块’的开发，使数据生成效率提升30%。”\\n        - personal_growth: “深入学习了Python数据分析库Pandas，提升了团队协作效率。”\\n        - period: “2024年第二季度”\\n        - report_style: “正式”\\n\\n        **输出（摘要）:**\\n        “2024年第二季度工作总结... 本季度，我主要负责客户需求分析与产品需求文档撰写... 在项目方面，我主导了‘智能报表模块’的开发，成功将数据生成效率提升30%... 个人在专业技能上，深入学习了Python Pandas库，并在团队协作中发挥了更积极的作用... 展望下一季度，我将...”\\n    - type: directory\\n      name: scripts\\n      content:\\n        children:\\n          - type: file\\n            name: generate_summary.py\\n            content: |\\n              #!/usr/bin/env python3\\n              # -*- coding: utf-8 -*-\\n              \\\"\\\"\\\"\\n              智能工作总结生成脚本。\\n              根据输入的工作内容、项目成果、个人成长等信息，生成结构化的工作总结报告。\\n              \\\"\\\"\\\"\\n\\n              import sys\\n              import json\\n              from datetime import datetime\\n\\n              def generate_work_summary(work_content, project_achievements, personal_growth, period=\\\"近期\\\", report_style=\\\"正式\\\"):\\n                  \\\"\\\"\\\"\\n                  生成工作总结报告的核心函数。\\n\\n                  Args:\\n                      work_content (str): 工作内容描述。\\n                      project_achievements (str): 项目成果描述。\\n                      personal_growth (str): 个人成长描述。\\n                      period (str, optional): 时间段。默认为“近期”。\\n                      report_style (str, optional): 报告风格。默认为“正式”。\\n\\n                  Returns:\\n                      str: 生成的工作总结报告文本。\\n                  \\\"\\\"\\\"\\n                  # 根据风格调整模板和措辞\\n                  style_map = {\\n                      \\\"正式\\\": {\\n                          \\\"template\\\": \\\"\\\"\\\"{period}工作总结\\n\\n              一、 主要工作内容\\n              {work_content}\\n\\n              二、 项目成果与贡献\\n              {project_achievements}\\n\\n              三、 个人成长与收获\\n              {personal_growth}\\n\\n              四、 不足与反思\\n              （请根据实际情况补充）\\n\\n              五、 未来工作计划\\n              （请根据实际情况补充）\\n\\n              总结人：[请填写]\\n              {date}\\\"\\\"\\\",\\n                          \\\"opening\\\": \\\"现将{period}的工作情况总结如下：\\\",\\n                          \\\"closing\\\": \\\"以上是我对{period}工作的总结，请审阅。\\\"\\n                      },\\n                      \\\"简洁\\\": {\\n                          \\\"template\\\": \\\"\\\"\\\"{period}工作要点\\n\\n              • 工作内容：{work_content}\\n              • 项目成果：{project_achievements}\\n              • 个人成长：{personal_growth}\\n              • 后续计划：（待补充）\\\"\\\"\\\",\\n                          \\\"opening\\\": \\\"{period}主要工作：\\\",\\n                          \\\"closing\\\": \\\"报告完毕。\\\"\\n                      },\\n                      \\\"详细\\\": {\\n                          \\\"template\\\": \\\"\\\"\\\"{period}详细工作总结报告\\n\\n              1. 工作职责与日常任务完成情况\\n              1.1 概述\\n              {work_content}\\n\\n              2. 重点项目参与情况及成果\\n              2.1 项目概述与个人角色\\n              {project_achievements}\\n\\n              3. 能力提升与自我学习\\n              3.1 技能提升\\n              {personal_growth}\\n\\n              4. 遇到的问题与解决方案\\n              （请详细描述）\\n\\n              5. 经验教训与反思\\n              （请详细描述）\\n\\n              6. 下一阶段目标与行动计划\\n              （请详细规划）\\n\\n              报告人：[请填写]\\n              日期：{date}\\\"\\\"\\\",\\n                          \\\"opening\\\": \\\"本报告旨在详细梳理{period}的工作表现、成果与成长。\\\",\\n                          \\\"closing\\\": \\\"此报告为{period}工作的全面回顾与展望。\\\"\\n                      }\\n                  }\\n\\n                  if report_style not in style_map:\\n                      report_style = \\\"正式\\\"\\n                      print(f\\\"警告：未识别的报告风格 '{report_style}'，已使用默认风格‘正式’。\\\", file=sys.stderr)\\n\\n                  style_config = style_map[report_style]\\n                  current_date = datetime.now().strftime(\\\"%Y年%m月%d日\\\")\\n\\n                  # 构建报告\\n                  report = style_config['template'].format(\\n                      period=period,\\n                      work_content=work_content,\\n                      project_achievements=project_achievements,\\n                      personal_growth=personal_growth,\\n                      date=current_date\\n                  )\\n\\n                  # 可选的增强：在报告开头或结尾插入风格化的开场/结束语\\n                  # 例如：report = style_config['opening'].format(period=period) + \\\"\\\\n\\\\n\\\" + report\\n                  # 例如：report = report + \\\"\\\\n\\\\n\\\" + style_config['closing'].format(period=period)\\n\\n                  return report\\n\\n              if __name__ == \\\"__main__\\\":\\n                  # 示例：从命令行参数或标准输入读取JSON数据\\n                  # 这里使用简单的示例输入\\n                  if len(sys.argv) > 1:\\n                      try:\\n                          input_data = json.loads(sys.argv[1])\\n                      except json.JSONDecodeError:\\n                          print(\\\"错误：输入参数不是有效的JSON格式。\\\", file=sys.stderr)\\n                          sys.exit(1)\\n                  else:\\n                      # 默认示例数据\\n                      input_data = {\\n                          \\\"work_content\\\": \\\"负责日常客户需求沟通与文档维护，参与产品功能设计讨论。\\\",\\n                          \\\"project_achievements\\\": \\\"作为核心成员完成‘数据可视化看板’项目，用户满意度调查得分提升25%。\\\",\\n                          \\\"personal_growth\\\": \\\"系统学习了前端框架Vue.js的基础知识，并成功应用于一个小型内部工具的开发。\\\",\\n                          \\\"period\\\": \\\"本季度\\\",\\n                          \\\"report_style\\\": \\\"正式\\\"\\n                      }\\n                      print(\\\"信息：使用内置示例数据。\\\", file=sys.stderr)\\n\\n                  # 提取参数，提供默认值\\n                  work_content = input_data.get(\\\"work_content\\\", \\\"\\\")\\n                  project_achievements = input_data.get(\\\"project_achievements\\\", \\\"\\\")\\n                  personal_growth = input_data.get(\\\"personal_growth\\\", \\\"\\\")\\n                  period = input_data.get(\\\"period\\\", \\\"近期\\\")\\n                  report_style = input_data.get(\\\"report_style\\\", \\\"正式\\\")\\n\\n                  if not work_content and not project_achievements and not personal_growth:\\n                      print(\\\"错误：工作内容、项目成果、个人成长至少需要提供一项信息。\\\", file=sys.stderr)\\n                      sys.exit(1)\\n\\n                  # 生成报告\\n                  summary_report = generate_work_summary(work_content, project_achievements, personal_growth, period, report_style)\\n                  print(summary_report)\\n          - type: file\\n            name: README.md\\n            content: |\\n              # 脚本目录说明\\n\\n              本目录包含“智能工作总结”技能的核心处理脚本。\\n\\n              ## 文件列表\\n              1.  `generate_summary.py`: 主生成脚本。根据输入参数，调用模板生成工作总结报告。\\n\\n              ## 使用方式\\n              ### 直接运行（示例）\\n              ```bash\\n              python generate_summary.py\\n              ```\\n              将使用内置的示例数据生成一份报告。\\n\\n              ### 通过JSON输入运行\\n              ```bash\\n              python generate_summary.py '{\\\"work_content\\\":\\\"...\\\", \\\"project_achievements\\\":\\\"...\\\", \\\"personal_growth\\\":\\\"...\\\", \\\"period\\\":\\\"本月\\\", \\\"report_style\\\":\\\"简洁\\\"}'\\n              ```\\n\\n              ### 作为模块导入\\n              ```python\\n              from generate_summary import generate_work_summary\\n              report = generate_work_summary(work_content=\\\"...\\\", ...)\\n              ```\\n\\n              ## 依赖\\n              本脚本仅依赖Python标准库，无需额外安装包。\\n```";

        // 模式1：还原为原字符
        String result1 = removeEscapeCharacters(testStr);
        System.out.println("还原模式结果：\n" + result1);
        // 输出：
        // Hello
        // World	"Java"\转义符（回车）

        // 模式2：直接删除转义符
        String result2 = removeEscapeCharacters(testStr, true);
        System.out.println("\n删除模式结果：" + result2);
        // 输出：HelloWorld"Java"转义符
    }
}
