#!/bin/bash

# ===========================================================================
# 配置区域
# ===========================================================================
# 配置文件路径(相对于脚本目录)
CONFIG_FILE="../../ascend_deployer/conf/opencode/opencode_config.json"
# install.sh脚本路径(相对于脚本目录)
INSTALL_SCRIPT="../../ascend_deployer/install.sh"
# ===========================================================================

# 设置脚本目录
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)

# 帮助信息
show_help() {
    echo "默认参数Usage:: $0 --port <base_port> --model <model_name> --api-key <api_key> --url <vllm_url>"
    echo "自定义参数Usage: $0 --port <base_port> --model <model_name> --api-key <api_key> --url <vllm_url> [--count <instance_count>] [--data_path <data_path>]"
    echo ""
    echo "Options:"
    echo "  -p, --port         多OpenCode实例的起始端口(必填),端口号依次累加,每个实例占用2个端口,如创建2个实例,起始端口为9080,则会占用9080~9083四个端口,请确保端口不会冲突"
    echo "  -m, --model        推理服务模型名称(必选)"
    echo "  -k, --api-key      模型服务的API KEY(必选)"
    echo "  -u, --url          推理服务URL(必选),如http://0.0.0.0:8000/v1"
    echo "  -c, --count        要启动的OpenCode实例数量(可选,默认:$INSTANCE_COUNT)"
    echo "  -d, --data_path    OpenCode数据存储目录(可选,默认:$DATA_PATH)"
    echo "  -h, --help         显示帮助信息"
}

INSTANCE_COUNT="1"
DATA_PATH="/data/opencode"
BASE_PORT=""
MODEL_NAME=""
VLLM_URL=""
API_KEY=""

while [[ $# -gt 0 ]]; do
    case $1 in
        -c|--count)
            INSTANCE_COUNT="$2"
            shift 2
            ;;
        -d|--data_path)
            DATA_PATH="$2"
            shift 2
            ;;
        -p|--port)
            BASE_PORT="$2"
            shift 2
            ;;
        -m|--model)
            MODEL_NAME="$2"
            shift 2
            ;;
        -k|--api-key)
            API_KEY="$2"
            shift 2
            ;;
        -u|--url)
            VLLM_URL="$2"
            shift 2
            ;;
        -h|--help)
            show_help
            exit 0
            ;;
        *)
            echo "未知参数: $1"
            show_help
            exit 1
            ;;
    esac
done

if [[ -z "$BASE_PORT" || -z "$MODEL_NAME" || -z "$VLLM_URL" || -z "$API_KEY" ]]; then
    echo "错误,缺少必选参数"
    echo "请确保提供以下必选参数:"
    echo "--port <base_port> --model <model_name> --api-key <api_key> --url <vllm_url>"
    exit 1
fi

TIMEOUT=3
VLLM_HEALTH_URL="${VLLM_URL%/*}/health"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -m $TIMEOUT -X GET "$VLLM_HEALTH_URL")

if [ "$HTTP_CODE" -eq 200 ]; then
    echo "vLLM 服务可访问 - 状态码:$HTTP_CODE"
else
    echo "vLLM 服务异常 - 状态码:$HTTP_CODE,检测地址:$VLLM_HEALTH_URL"
    exit 1
fi

echo "{
    \"instance_count\": $INSTANCE_COUNT,
    \"data_path\": \"$DATA_PATH\",
    \"base_port\": $BASE_PORT,
    \"vllm_url\": \"$VLLM_URL\",
    \"model_name\": \"$MODEL_NAME\",
    \"api_key\": \"$API_KEY\"
}" > $CONFIG_FILE

echo ""
echo "正在启动安装脚本..."

# 启动install.sh脚本
cd "$SCRIPT_DIR"
echo "y" | bash "$INSTALL_SCRIPT" --install opencode --stdout_callback community.general.yaml