@echo off
chcp 65001 >nul
echo ========================================
echo TSP智能助手 - 自动推送脚本
echo ========================================
echo.

:: 检查Git状态
echo [1/4] 检查Git状态...
git status --porcelain >nul 2>&1
if %errorlevel% neq 0 (
    echo ❌ Git未初始化或不在Git仓库中
    pause
    exit /b 1
)

:: 显示当前状态
echo 📋 当前Git状态:
git status --short
echo.

:: 询问是否继续
set /p confirm="是否继续推送? (y/n): "
if /i "%confirm%" neq "y" (
    echo 操作已取消
    pause
    exit /b 0
)

:: 检查是否有更改需要提交
echo.
echo [2/4] 检查更改状态...

:: 启用延迟变量扩展
setlocal enabledelayedexpansion

:: 检查未暂存的更改
git diff --quiet
set has_unstaged=%errorlevel%

:: 检查已暂存的更改
git diff --cached --quiet
set has_staged=%errorlevel%

:: 检查未跟踪的文件
git ls-files --others --exclude-standard >nul 2>&1
set has_untracked=%errorlevel%

if %has_unstaged% equ 0 if %has_staged% equ 0 if %has_untracked% neq 0 (
    echo ℹ️ 没有检测到任何更改，无需提交
    echo.
    echo ✅ 工作区干净，无需推送
    pause
    exit /b 0
)

:: 显示详细状态
echo 📊 详细状态信息:
echo 未暂存更改: 
if %has_unstaged% neq 0 (
    git diff --name-only
) else (
    echo   无
)

echo 已暂存更改:
if %has_staged% neq 0 (
    git diff --cached --name-only
) else (
    echo   无
)

echo 未跟踪文件:
if %has_untracked% neq 0 (
    git ls-files --others --exclude-standard
) else (
    echo   无
)
echo.

:: 添加所有更改
echo 添加所有更改到暂存区...
git add .
if %errorlevel% neq 0 (
    echo ❌ 添加文件失败
    pause
    exit /b 1
)
echo ✅ 文件已添加到暂存区

:: 检查markdown文件修改并生成智能提交信息
echo.
echo [3/4] 分析markdown文件并生成提交信息...

:: 检查是否有markdown文件修改
set md_files=
for /f "tokens=*" %%f in ('git diff --name-only --cached 2^>nul ^| findstr /i "\.md$"') do (
    set md_files=!md_files! %%f
)
for /f "tokens=*" %%f in ('git diff --name-only 2^>nul ^| findstr /i "\.md$"') do (
    set md_files=!md_files! %%f
)

set commit_msg=
if not "%md_files%"=="" (
    echo 📝 检测到markdown文件修改:
    echo %md_files%
    echo.
    
    :: 提取markdown文件的主要内容
    set commit_title=
    set commit_type=docs
    
    :: 检查是否有修复相关内容
    for %%f in (%md_files%) do (
        if exist "%%f" (
            for /f "tokens=*" %%l in ('type "%%f" ^| findstr /i "修复\|解决\|问题\|错误"') do (
                set commit_type=fix
                set commit_title=修复问题
                goto :found_fix
            )
        )
    )
    
    :: 检查是否有新功能相关内容
    for %%f in (%md_files%) do (
        if exist "%%f" (
            for /f "tokens=*" %%l in ('type "%%f" ^| findstr /i "功能\|新增\|添加\|实现"') do (
                set commit_type=feat
                set commit_title=新增功能
                goto :found_feature
            )
        )
    )
    
    :: 检查是否有优化相关内容
    for %%f in (%md_files%) do (
        if exist "%%f" (
            for /f "tokens=*" %%l in ('type "%%f" ^| findstr /i "优化\|性能\|改进\|提升"') do (
                set commit_type=perf
                set commit_title=性能优化
                goto :found_optimization
            )
        )
    )
    
    :: 提取文件标题
    for %%f in (%md_files%) do (
        if exist "%%f" (
            for /f "tokens=*" %%l in ('type "%%f" ^| findstr /n "^#" ^| head -1') do (
                set line=%%l
                set line=!line:*:=!
                set line=!line:# =!
                set line=!line:## =!
                if "!line!" neq "" (
                    set commit_title=!line!
                    goto :found_title
                )
            )
        )
    )
    
    :found_fix
    :found_feature
    :found_optimization
    :found_title
    
    if "%commit_title%"=="" (
        set commit_title=更新文档记录
    )
    
    :: 生成提交信息
    set commit_msg=%commit_type%: %commit_title%
    echo 📋 生成的提交信息: %commit_msg%
    echo.
) else (
    echo ℹ️ 没有检测到markdown文件修改
    set commit_msg=feat: 自动提交 - %date% %time%
)

:: 询问是否使用生成的提交信息
set /p confirm="是否使用此提交信息? (y/n/e编辑): "
if /i "%confirm%"=="e" (
    set /p commit_msg="请输入自定义提交信息: "
) else if /i "%confirm%" neq "y" (
    set /p commit_msg="请输入提交信息: "
)

:: 提交更改
echo 提交信息: %commit_msg%
git commit -m "%commit_msg%"
if %errorlevel% neq 0 (
    echo ❌ 提交失败
    pause
    exit /b 1
)
echo ✅ 提交成功

:: 推送到远程仓库
echo.
echo [4/4] 推送到远程仓库...

:: 获取当前分支名称（在延迟变量扩展内）
set current_branch=
for /f "tokens=*" %%b in ('git branch --show-current 2^>nul') do set current_branch=%%b

if "!current_branch!"=="" (
    echo ❌ 无法获取当前分支名称
    echo 尝试使用默认分支 main...
    set current_branch=main
) else (
    echo 📍 当前分支: !current_branch!
)

echo.

:: 先尝试拉取最新更改
echo 🔄 检查远程更新...
git fetch origin !current_branch! >nul 2>&1
set fetch_result=!errorlevel!
if !fetch_result! neq 0 (
    echo ⚠️ 无法获取远程更新，尝试获取所有分支...
    git fetch origin >nul 2>&1
    set fetch_all_result=!errorlevel!
    if !fetch_all_result! neq 0 (
        echo ⚠️ 无法获取远程更新，继续推送...
    ) else (
        echo ✅ 远程更新检查完成
    )
) else (
    echo ✅ 远程更新检查完成
)

:: 检查远程分支是否存在，如果不存在则设置上游
echo 🔍 检查远程分支状态...
git ls-remote --heads origin !current_branch! >nul 2>&1
set remote_exists=!errorlevel!
set push_result=0

if !remote_exists! equ 0 (
    echo 远程分支 !current_branch! 已存在
    :: 推送到远程（分支已存在）
    git push origin !current_branch!
    set push_result=!errorlevel!
) else (
    echo 远程分支 !current_branch! 不存在，将创建并设置上游
    :: 推送到远程并设置上游（分支不存在）
    git push -u origin !current_branch!
    set push_result=!errorlevel!
)

if !push_result! neq 0 (
    echo ❌ 推送失败
    echo.
    echo 💡 可能的原因:
    echo    - 网络连接问题
    echo    - 远程仓库权限不足
    echo    - 分支冲突
    echo    - 需要先拉取远程更改
    echo.
    echo 🔧 尝试自动解决冲突...
    git pull origin !current_branch! --rebase
    set pull_result=!errorlevel!
    if !pull_result! equ 0 (
        echo ✅ 冲突已解决，重新推送...
        git push origin !current_branch!
        set final_push_result=!errorlevel!
        if !final_push_result! equ 0 (
            echo ✅ 推送成功！
        ) else (
            echo ❌ 重新推送失败
            echo.
            echo 🔧 建议手动解决:
            echo    1. 运行: git pull origin !current_branch!
            echo    2. 解决冲突后运行: git push origin !current_branch!
            pause
            exit /b 1
        )
    ) else (
        echo ❌ 无法自动解决冲突
        echo.
        echo 🔧 建议手动解决:
        echo    1. 运行: git pull origin !current_branch!
        echo    2. 解决冲突后运行: git push origin !current_branch!
        pause
        exit /b 1
    )
) else (
    echo ✅ 推送成功！
)

echo.
echo ========================================
echo ✅ 推送完成！
echo ========================================
echo 📊 提交统计:
git log --oneline -1
echo.
echo 🌐 远程仓库状态:
git status
echo.
pause
