#!/bin/bash

# 应用配置
JAVA_BIN="/www/server/java/jdk-20.0.2/bin/java"  # jdk版本要17及以上
JAR_PATH="/www/wwwroot/AliPack/QJB/AliToolKit.jar" #默认启动路径
SERVER_PORT=9420  #端口 可自定义
APP_NAME="AliToolKit"
LOG_DIR="/www/wwwroot/AliPack/QJB/logs"
PID_FILE="${LOG_DIR}/${APP_NAME}.pid"

# JVM 参数
JVM_OPTS="-Xmx1024M -Xms256M"

# 创建日志目录
mkdir -p ${LOG_DIR}

# 检查Java环境
check_java() {
    # 检查指定的Java路径是否存在
    if [ ! -x "${JAVA_BIN}" ]; then
        echo "⚠️ 警告: 指定的Java路径不存在或不可执行: ${JAVA_BIN}"
        echo "ℹ️ 尝试使用系统默认的Java"
        if ! command -v java &> /dev/null; then
            echo "❌ 错误: 系统中未找到 java 命令"
            echo "ℹ️ 请确保JDK已安装并配置在系统PATH中"
            exit 1
        fi
        # 使用系统默认的java
        JAVA_BIN="java"
    fi
    
    # 获取Java版本
    JAVA_VER=$("${JAVA_BIN}" -version 2>&1 | awk -F '"' '/version/ {print $2}')
    echo "ℹ️ 使用Java版本: ${JAVA_VER}"
}

# 启动函数
start() {
    check_java
    
    # 检查是否已运行
    if [ -f ${PID_FILE} ]; then
        PID=$(cat ${PID_FILE})
        if ps -p ${PID} > /dev/null; then
            echo "⚠️  应用已在运行 (PID: ${PID})"
            return 1
        else
            # 清理无效PID文件
            rm -f ${PID_FILE}
        fi
    fi

    # 启动命令
    echo "🚀 启动命令: ${JAVA_BIN} ${JVM_OPTS} -jar ${JAR_PATH} --server.port=${SERVER_PORT}"
    nohup ${JAVA_BIN} ${JVM_OPTS} -jar ${JAR_PATH} --server.port=${SERVER_PORT} > "${LOG_DIR}/${APP_NAME}.out" 2>&1 &
    
    # 保存PID
    PID=$!
    echo ${PID} > ${PID_FILE}
    
    # 等待启动完成
    sleep 5
    if ps -p ${PID} > /dev/null; then
        echo "✅ 应用启动成功! PID: ${PID}"
        echo "🔍 日志输出: ${LOG_DIR}/${APP_NAME}.out"
        echo "💻 使用以下命令查看日志: tail -f ${LOG_DIR}/${APP_NAME}.out"
    else
        echo "❌ 应用启动失败! 请检查日志:"
        tail -n 20 ${LOG_DIR}/${APP_NAME}.out
        rm -f ${PID_FILE}
        return 1
    fi
}

# 停止函数
stop() {
    if [ -f ${PID_FILE} ]; then
        PID=$(cat ${PID_FILE})
        kill ${PID} > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            rm -f ${PID_FILE}
            echo "🛑 应用已停止 (PID: ${PID})"
        else
            echo "⚠️  停止失败或应用未运行"
        fi
    else
        echo "ℹ️  未找到PID文件，应用可能未运行"
    fi
}

# 状态检查
status() {
    if [ -f ${PID_FILE} ]; then
        PID=$(cat ${PID_FILE})
        if ps -p ${PID} > /dev/null; then
            echo "🟢 应用运行中 (PID: ${PID})"
            echo "🌐 使用以下命令检查端口监听: netstat -tuln | grep ${SERVER_PORT}"
        else
            echo "🔴 PID文件存在但应用未运行"
        fi
    else
        echo "ℹ️  应用未运行"
    fi
}

# 脚本入口
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 3
        start
        ;;
    status)
        status
        ;;
    *)
        echo "使用说明: $0 {start|stop|restart|status}"
        exit 1
esac

exit 0