#!/bin/bash

#########################################
# AI小红书 Go 后端 - 生产环境启动脚本
# 专用于生产环境快速部署
#########################################

PORT=8070
ENV="prod"
LOG_FILE="ai_xhs_prod.log"

echo "=== 停止端口 $PORT 上的 Go 服务 ==="

# 方法1: 查找 go run 进程
GO_PID=$(ps aux | grep "go run main.go" | grep -v grep | awk '{print $2}')

if [ -n "$GO_PID" ]; then
    echo "找到 Go 服务进程: $GO_PID"
    kill -9 $GO_PID 2>/dev/null
    echo "Go 服务进程已终止"
    sleep 2
fi

# 方法2: 强制清理端口
echo "强制清理端口 $PORT..."
PORT_PID=$(lsof -ti:$PORT 2>/dev/null)
if [ -n "$PORT_PID" ]; then
    echo "端口被进程 $PORT_PID 占用，正在终止..."
    kill -9 $PORT_PID 2>/dev/null
fi

sudo fuser -k $PORT/tcp 2>/dev/null || true
sudo pkill -f ":$PORT" 2>/dev/null || true

# 等待端口释放
sleep 3

echo ""
echo "=== 环境检查 ==="

# 检查 Go 环境
if ! command -v go &> /dev/null; then
    echo "❌ 错误: 未检测到 Go 环境"
    exit 1
fi
echo "✅ Go 环境: $(go version)"

# 检查配置文件
if [ ! -f "config/config.prod.yaml" ]; then
    echo "❌ 错误: 未找到生产环境配置文件"
    exit 1
fi
echo "✅ 配置文件: config/config.prod.yaml"

echo ""
echo "=== 下载依赖 ==="
go mod tidy

echo ""
echo "=== 启动生产环境服务 ==="

# 设置环境变量
export APP_ENV=prod

# 清空旧日志
> $LOG_FILE

# 启动服务
nohup go run main.go > $LOG_FILE 2>&1 &
NEW_PID=$!

echo "✅ 服务已启动 (PID: $NEW_PID)"

# 验证启动
echo ""
echo "=== 启动验证 (等待 5 秒) ==="
sleep 5

if ps -p $NEW_PID > /dev/null 2>&1; then
    echo "✅ Go 服务启动成功"
    echo "📋 日志文件: $LOG_FILE"
    echo "👀 查看日志: tail -f $LOG_FILE"
    echo "🌐 服务地址: http://localhost:$PORT"
    echo "🔍 进程PID: $NEW_PID"
    
    # 检查端口监听
    if lsof -ti:$PORT > /dev/null 2>&1; then
        echo "✅ 端口 $PORT 监听正常"
    else
        echo "⚠️  端口 $PORT 未监听，请检查日志"
    fi
    
    # 显示最近日志
    echo ""
    echo "=== 最近日志 ==="
    tail -n 10 $LOG_FILE
else
    echo "❌ Go 服务启动失败，请检查日志"
    echo ""
    tail -n 20 $LOG_FILE
    exit 1
fi
