#!/bin/bash

# 功能更新归档脚本
# 用途: 自动创建功能更新归档目录结构，并生成文档模板

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 打印带颜色的信息
print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否在项目根目录
check_project_root() {
    if [ ! -f "FILE_ORGANIZATION.md" ]; then
        print_error "请在项目根目录运行此脚本"
        exit 1
    fi
}

# 显示使用说明
show_usage() {
    echo "使用方法: $0 <功能名称> [开发者名称]"
    echo ""
    echo "示例:"
    echo "  $0 adaptive_lookahead \"李四\""
    echo "  $0 dynamic_obstacle_avoidance"
    echo ""
    echo "说明:"
    echo "  - 功能名称使用英文和下划线，如: adaptive_lookahead"
    echo "  - 开发者名称可选，默认从git config获取"
    exit 1
}

# 获取当前日期
get_date() {
    date +%Y%m%d
}

# 获取开发者名称
get_developer() {
    if [ -n "$1" ]; then
        echo "$1"
    else
        git config user.name || echo "Unknown"
    fi
}

# 获取最新的commit信息
get_latest_commit() {
    if git rev-parse --git-dir > /dev/null 2>&1; then
        echo "$(git rev-parse --short HEAD)"
    else
        echo "N/A"
    fi
}

# 创建归档目录
create_archive_dirs() {
    local date=$1
    local feature_name=$2
    local archive_path="archives/updates/${date}_${feature_name}"

    print_info "创建归档目录: ${archive_path}"

    mkdir -p "${archive_path}/code"
    mkdir -p "${archive_path}/docs"
    mkdir -p "${archive_path}/tests"
    mkdir -p "docs/updates"

    print_success "目录创建完成"
    echo "${archive_path}"
}

# 生成文档
create_document() {
    local date=$1
    local feature_name=$2
    local developer=$3
    local commit_hash=$4
    local archive_path=$5

    local doc_name="UPDATE_${feature_name}_${date}.md"
    local doc_path="${archive_path}/docs/${doc_name}"
    local template_path=".claude/templates/feature_update_template.md"

    print_info "生成文档: ${doc_name}"

    # 如果模板存在，使用模板；否则创建基本文档
    if [ -f "${template_path}" ]; then
        cp "${template_path}" "${doc_path}"

        # 替换模板变量
        sed -i "s/{{FEATURE_NAME}}/${feature_name}/g" "${doc_path}"
        sed -i "s/{{DATE}}/${date}/g" "${doc_path}"
        sed -i "s/{{AUTHOR}}/${developer}/g" "${doc_path}"
        sed -i "s/{{COMMIT_HASH}}/${commit_hash}/g" "${doc_path}"
        sed -i "s/{{DATE}}_{{FEATURE_NAME}}/${date}_${feature_name}/g" "${doc_path}"
    else
        # 创建基本文档
        cat > "${doc_path}" << EOF
# 功能更新: ${feature_name}

**日期**: ${date}
**开发者**: ${developer}
**Git Commit**: ${commit_hash}

---

## 功能概述

[简要描述新功能的目的和价值]

## 需求背景

[详细描述需求背景和使用场景]

## 设计方案

[技术设计方案描述]

### 架构设计

[架构设计说明]

### API设计

\`\`\`cpp
// 接口定义
\`\`\`

## 实现细节

### 新增文件

- \`file1.cpp\` - [文件说明]

### 修改文件

- \`file2.cpp\` - [修改说明]

## 使用方法

\`\`\`cpp
// 使用示例
\`\`\`

## 测试验证

[测试结果]

## Git提交信息

\`\`\`
Commit ID: ${commit_hash}
\`\`\`

## 后续计划

- [ ] [待完善项1]
- [ ] [待完善项2]

---

**归档位置**: \`archives/updates/${date}_${feature_name}/\`
EOF
    fi

    # 复制到快速查阅目录
    cp "${doc_path}" "docs/updates/${doc_name}"

    print_success "文档生成完成"
    echo "${doc_path}"
}

# 显示下一步操作
show_next_steps() {
    local doc_path=$1
    local archive_path=$2

    echo ""
    print_success "功能更新归档创建完成!"
    echo ""
    echo "📁 归档目录: ${archive_path}"
    echo "📄 文档位置: ${doc_path}"
    echo "📋 快速查阅: docs/updates/"
    echo ""
    print_info "下一步操作:"
    echo "  1. 编辑文档: vim ${doc_path}"
    echo "  2. 复制新增/修改的代码到: ${archive_path}/code/"
    echo "  3. 添加测试文件到: ${archive_path}/tests/"
    echo "  4. 更新使用示例到: examples/"
    echo "  5. 提交git: git add . && git commit -m \"feature: ${feature_name}\""
    echo ""
}

# 主函数
main() {
    # 检查参数
    if [ $# -lt 1 ]; then
        show_usage
    fi

    local feature_name=$1
    local developer=$(get_developer "$2")

    # 检查项目根目录
    check_project_root

    # 获取信息
    local date=$(get_date)
    local commit_hash=$(get_latest_commit)

    print_info "开始创建功能更新归档"
    print_info "功能名称: ${feature_name}"
    print_info "日期: ${date}"
    print_info "开发者: ${developer}"
    print_info "Commit: ${commit_hash}"
    echo ""

    # 创建目录
    local archive_path=$(create_archive_dirs "${date}" "${feature_name}")

    # 生成文档
    local doc_path=$(create_document "${date}" "${feature_name}" "${developer}" "${commit_hash}" "${archive_path}")

    # 显示下一步操作
    show_next_steps "${doc_path}" "${archive_path}"
}

# 运行主函数
main "$@"
