#!/bin/bash
# kimi-wiki — Kimi CLI Repo Wiki 本地管理脚本
# 项目地址: https://github.com/<GITHUB_USERNAME>/kimi-dev-workflow
# 用法: kimi-wiki [init [git-url]|sync|list|search "query"|status|help]

set -e

META_DIR=".kimi-dev"
WIKI_DIR="${META_DIR}/wiki"
WIKI_GIT_DIR="${META_DIR}/.kimi/wiki-git"
GREPAI_BIN="${HOME}/.local/bin/grepai"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_ok()   { echo -e "${GREEN}[OK]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_err()  { echo -e "${RED}[ERR]${NC} $1"; }

check_grepai() {
    if ! command -v grepai &> /dev/null; then
        if [ -x "$GREPAI_BIN" ]; then
            export PATH="${HOME}/.local/bin:$PATH"
        else
            log_err "grepai 未安装"
            echo "  安装: curl -fsSL https://raw.githubusercontent.com/yoanbernabeu/grepai/main/install.sh | INSTALL_DIR=\$HOME/.local/bin sh"
            exit 1
        fi
    fi
}

cmd_init() {
    local git_url="${1:-}"

    if [ -n "$git_url" ]; then
        log_info "从远程仓库初始化 Wiki..."
        log_info "仓库: $git_url"

        # 如果已存在，先备份
        if [ -d "$WIKI_DIR" ]; then
            local backup="${WIKI_DIR}.backup.$(date +%Y%m%d%H%M%S)"
            mv "$WIKI_DIR" "$backup"
            log_warn "已备份旧 wiki 到 $backup"
        fi

        # 克隆 wiki 仓库
        if git clone "$git_url" "$WIKI_DIR" 2>/dev/null; then
            log_ok "Wiki 克隆成功！"
        else
            log_err "克隆失败，请检查仓库地址和权限"
            exit 1
        fi

        # 记录远程地址，方便后续 sync
        echo "$git_url" > "$WIKI_DIR/.wiki-origin"
        log_info "已记录远程地址到 $WIKI_DIR/.wiki-origin"

    else
        log_info "初始化本地 Wiki 目录..."

        if [ -d "$WIKI_DIR" ]; then
            log_warn "Wiki 目录已存在: $WIKI_DIR"
        else
            mkdir -p "$WIKI_DIR"
            log_ok "Wiki 目录已创建: $WIKI_DIR"
        fi

        # 优先尝试通过 kimi-dev 自动生成 wiki
        if command -v kimi-dev &> /dev/null; then
            log_info "尝试根据代码自动生成 Wiki..."
            if kimi-dev wiki generate 2>/dev/null; then
                log_ok "Wiki 自动生成成功！"
            else
                log_warn "自动生成失败，创建示例页面"
                _create_example_pages
            fi
        else
            _create_example_pages
        fi
    fi

    echo ""
    log_ok "Wiki 初始化完成！"
    echo ""
    echo "  📁 Wiki 位置: $(pwd)/$WIKI_DIR"
    echo "  🔍 查看页面:  kimi-wiki list"
    echo "  🔎 搜索内容:  kimi-wiki search \"关键词\""
    echo ""
    echo "  💡 提示: 运行 kimi-index reindex 以将 wiki 纳入语义搜索"
    echo ""
}

_create_example_pages() {
    if [ ! -f "$WIKI_DIR/01-getting-started.md" ]; then
        cat > "$WIKI_DIR/01-getting-started.md" << 'EOF'
# 项目入门指南

## 环境搭建

## 快速开始

## 常用命令
EOF
        log_ok "已创建示例页面: $WIKI_DIR/01-getting-started.md"
    fi

    if [ ! -f "$WIKI_DIR/02-architecture.md" ]; then
        cat > "$WIKI_DIR/02-architecture.md" << 'EOF'
# 架构说明

## 系统架构图

## 模块划分

## 技术选型理由
EOF
        log_ok "已创建示例页面: $WIKI_DIR/02-architecture.md"
    fi
}

cmd_sync() {
    if [ ! -d "$WIKI_DIR" ]; then
        log_err "Wiki 目录不存在，请先运行: kimi-wiki init [git-url]"
        exit 1
    fi

    if [ ! -f "$WIKI_DIR/.wiki-origin" ]; then
        log_err "未找到远程仓库记录 (.wiki-origin)"
        echo "  如需关联远程 wiki，请删除 $WIKI_DIR 后重新执行:"
        echo "    kimi-wiki init <git-url>"
        exit 1
    fi

    local git_url
    git_url=$(cat "$WIKI_DIR/.wiki-origin")

    log_info "同步 Wiki 从远程仓库..."
    log_info "仓库: $git_url"

    cd "$WIKI_DIR"
    if git pull --rebase 2>/dev/null; then
        log_ok "Wiki 同步成功！"
    else
        log_err "同步失败，请检查网络或手动解决冲突"
        exit 1
    fi
    cd - > /dev/null

    echo ""
    echo "  💡 提示: 运行 kimi-index reindex 以更新语义索引"
    echo ""
}

cmd_list() {
    if [ ! -d "$WIKI_DIR" ]; then
        log_err "Wiki 目录不存在，请先运行: kimi-wiki init"
        exit 1
    fi

    local count=0
    local files=()

    while IFS= read -r -d '' file; do
        files+=("$file")
        ((count++))
    done < <(find "$WIKI_DIR" -maxdepth 2 -name "*.md" -type f ! -name ".wiki-origin" -print0 2>/dev/null | sort -z)

    if [ "$count" -eq 0 ]; then
        log_warn "Wiki 目录为空"
        echo "  添加 markdown 文件到 $WIKI_DIR/ 即可"
        exit 0
    fi

    echo ""
    echo "┌─────────────────────────────────────────┐"
    echo "│          Wiki 页面列表                  │"
    echo "├─────────────────────────────────────────┤"

    local relative
    for file in "${files[@]}"; do
        relative="${file#$WIKI_DIR/}"
        printf "│ • %-35s │\n" "$relative"
    done

    echo "├─────────────────────────────────────────┤"
    printf "│ 共 %-3d 个页面                          │\n" "$count"
    echo "└─────────────────────────────────────────┘"
    echo ""
}

cmd_search() {
    check_grepai

    if [ ! -d ".grepai" ]; then
        log_err "当前目录未初始化 grepai"
        echo "  运行: grepai init"
        exit 1
    fi

    [ $# -eq 0 ] && { log_err "用法: kimi-wiki search \"关键词\""; exit 1; }

    log_info "在 Wiki 中搜索: $*"
    echo ""

    # 先尝试用 grepai 搜索，然后过滤 wiki 路径
    local results
    results=$(grepai search "$*" 2>/dev/null || true)

    if [ -z "$results" ]; then
        log_warn "未找到匹配结果"
        echo "  提示: 确保已运行 kimi-index start 或 grepai watch 建立索引"
        exit 0
    fi

    # 过滤出 wiki 相关的结果
    local wiki_results
    wiki_results=$(echo "$results" | grep -E "(^File: )?(.*/)?wiki/" || true)

    if [ -z "$wiki_results" ]; then
        log_warn "Wiki 中未找到匹配结果"
        echo ""
        echo "  试试扩大搜索范围（代码库全局搜索）:"
        echo "    grepai search \"$*\""
        exit 0
    fi

    echo "$wiki_results"
}

cmd_status() {
    echo ""
    echo "┌─────────────────────────────────────────┐"
    echo "│           Wiki 状态                     │"
    echo "├─────────────────────────────────────────┤"

    if [ -d "$WIKI_DIR" ]; then
        local count
        count=$(find "$WIKI_DIR" -maxdepth 2 -name "*.md" -type f ! -name ".wiki-origin" 2>/dev/null | wc -l | xargs)
        printf "│ 📁 Wiki 目录    存在 (%s 个页面)        │\n" "$count"

        if [ -f "$WIKI_DIR/.wiki-origin" ]; then
            local origin
            origin=$(cat "$WIKI_DIR/.wiki-origin")
            printf "│ 🔗 远程仓库     %s\n" "$origin"

            cd "$WIKI_DIR"
            if git rev-parse --git-dir > /dev/null 2>&1; then
                local last_commit
                last_commit=$(git log -1 --format=%cd --date=short 2>/dev/null || echo "未知")
                printf "│ 🕐 最后同步     %s\n" "$last_commit"
            fi
            cd - > /dev/null
        else
            echo "│ 🔗 远程仓库     无（本地 Wiki）         │"
        fi
    else
        echo "│ 📁 Wiki 目录    不存在                  │"
        echo "│                                         │"
        echo "│ 初始化: kimi-wiki init [git-url]        │"
    fi

    echo "└─────────────────────────────────────────┘"
    echo ""
}

cmd_generate() {
    if command -v kimi-dev &> /dev/null; then
        log_info "根据代码自动生成 Wiki..."
        kimi-dev wiki generate "$@"
    else
        log_err "kimi-dev 未安装，无法自动生成 Wiki"
        echo "  请确保 kimi-dev-workflow 已正确安装"
        exit 1
    fi
}

cmd_watch() {
    local subcmd="${1:-status}"
    if command -v kimi-dev &> /dev/null; then
        case "$subcmd" in
            start)
                log_info "启动 Wiki 自动监控..."
                kimi-dev wiki watch start
                ;;
            stop)
                log_info "停止 Wiki 自动监控..."
                kimi-dev wiki watch stop
                ;;
            status)
                kimi-dev wiki watch status
                ;;
            *)
                log_err "未知 watch 子命令: $subcmd"
                echo "  用法: kimi-wiki watch [start|stop|status]"
                exit 1
                ;;
        esac
    else
        log_err "kimi-dev 未安装"
        exit 1
    fi
}

cmd_help() {
    cat << 'EOF'

  kimi-wiki — Kimi CLI Repo Wiki 本地管理

  用法:
    kimi-wiki init [git-url]    初始化 Wiki（本地或从远程仓库克隆）
    kimi-wiki sync              从远程仓库同步 Wiki 更新
    kimi-wiki list              列出所有 Wiki 页面
    kimi-wiki search "xxx"      语义搜索 Wiki 内容
    kimi-wiki generate          根据代码自动生成 Wiki
    kimi-wiki watch [start|stop|status]  Wiki 自动监控
    kimi-wiki status            查看 Wiki 状态
    kimi-wiki help              帮助

  示例:
    # 创建本地 Wiki（自动根据代码生成）
    kimi-wiki init

    # 从 GitHub Wiki 克隆
    kimi-wiki init https://github.com/user/repo.wiki.git

    # 根据代码重新生成 Wiki
    kimi-wiki generate

    # 启动自动监控（代码变更时自动更新 wiki）
    kimi-wiki watch start

    # 搜索业务规则
    kimi-wiki search "订单状态机"

EOF
}

main() {
    local cmd="${1:-help}"
    case "$cmd" in
        init)      shift; cmd_init "$@" ;;
        sync)      cmd_sync ;;
        list)      cmd_list ;;
        search)    shift; cmd_search "$@" ;;
        generate)  shift; cmd_generate "$@" ;;
        watch)     shift; cmd_watch "$@" ;;
        status)    cmd_status ;;
        help|--help|-h) cmd_help ;;
        *) log_err "未知命令: $cmd"; cmd_help; exit 1 ;;
    esac
}

main "$@"
