

#!/bin/bash
# Dify 一键安装脚本（适用于Ubuntu）
# 作者：数智互联
# 技术支持：数智互联
# 公众号：数智互联大模型
# 官网：www.jizhixiutu.online

set -e # 遇到错误立即退出

LOG_FILE="install.log"
INSTALL_DIR=$(dirname "$(readlink -f "$0")")

# 记录日志函数
log() {
    echo "[$(date +'%Y-%m-%d %T')] $1" | tee -a "$LOG_FILE"
}

# 检查root权限
check_root() {
    if [ "$EUID" -ne 0 ]; then
        log "需要root权限，请使用sudo运行脚本"
        sudo -k # 清除现有权限缓存
        if sudo true; then
            exec sudo "$0" "$@"
        else
            log "权限获取失败，脚本退出"
            exit 1
        fi
    fi
}

# 显示欢迎信息
show_welcome() {
    clear
    echo "===================================="
    echo " Dify 一键安装脚本 for Ubuntu    "
    echo " 由数智互联技术团队提供支持      "
    echo " 技术支持：数智互联                 "
    echo " 公众号：数智互联大模型            "
    echo " 官网：www.jizhixiutu.online       "
    echo "===================================="
    echo
}

# 检查Docker安装
check_docker() {
    log "检查Docker环境..."
    if ! command -v docker &> /dev/null; then
        log "Docker未安装，尝试自动安装..."
        apt-get update
        apt-get install -y docker.io docker-compose
        systemctl enable --now docker
    fi

    # 确保Docker服务运行
    systemctl start docker 2>/dev/null || true
    log "正在校验Docker版本..."
    docker --version | tee -a "$LOG_FILE"
}

# 解压安装文件
extract_dify() {
    local zip_file="dify-main.zip"
    local target_dir="$INSTALL_DIR/dify"
    
    log "检查安装文件..."
    if [ ! -f "$zip_file" ]; then
        log "错误：找不到 $zip_file 文件"
        exit 1
    fi

    # 安装unzip如果不存在
    if ! command -v unzip &> /dev/null; then
        apt-get install -y unzip
    fi

    log "解压安装文件..."
    mkdir -p "$target_dir"
    unzip -o "$zip_file" -d "$target_dir" 2>&1 | tee -a "$LOG_FILE"

    local docker_dir="$target_dir/dify-main/docker"
    if [ ! -d "$docker_dir" ]; then
        log "错误：解压后目录结构不正确，请检查压缩包内容"
        exit 1
    fi

    cd "$docker_dir" || exit 1
}

# 配置环境文件
configure_env() {
    log "配置环境变量..."
    if [ -f .env.example ]; then
        cp -f .env.example .env
        # 修改端口设置
        sed -i 's/EXPOSE_NGINX_PORT=80/EXPOSE_NGINX_PORT=9022/g' .env
        sed -i 's/EXPOSE_NGINX_SSL_PORT=443/EXPOSE_NGINX_SSL_PORT=9443/g' .env
        log "环境文件配置完成"
    else
        log "错误：找不到.env.example文件"
        exit 1
    fi
}

# 启动Docker服务
start_services() {
    log "启动Dify服务（可能需要几分钟）..."
    docker compose up -d 2>&1 | tee -a "$LOG_FILE"
}

# 显示完成信息
show_completion() {
    echo
    echo "======== 安装完成 ========"
    echo "访问地址：http://localhost:9022"
    echo "停止服务：cd $INSTALL_DIR/dify/dify-main/docker && docker compose down"
    echo "=========================="
    echo
    echo "======== 支持信息 ========"
    echo "技术支持：数智互联"
    echo "公众号：数智互联大模型"
    echo "官网：www.jizhixiutu.online"
    echo "安装日志：$INSTALL_DIR/$LOG_FILE"
    echo "=========================="
}

# 主执行流程
main() {
    check_root "$@"
    show_welcome
    check_docker
    extract_dify
    configure_env
    start_services
    show_completion
}

main "$@"
