#!/bin/bash

# ANSI 转义序列定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m'  # 重置颜色

# 查找项目根目录
find_project_root() {
    local current_dir=$(pwd)
    while true; do
        if [[ -f "$current_dir/manage.py" || -d "$current_dir/.git" ]]; then
            echo "$current_dir"
            return
        fi
        local parent_dir=$(dirname "$current_dir")
        if [[ "$parent_dir" == "$current_dir" ]]; then
            echo "$current_dir"
            return
        fi
        current_dir="$parent_dir"
    done
}

# 获取项目名称
get_project_name() {
    local project_root=$(find_project_root)
    basename "$project_root"
}

# 创建虚拟环境
create_venv() {
    local envs_root="/envs"
    local project_name=$(get_project_name)
    local venv_path="$envs_root/$project_name"
    
    # 指定Python 3.9.5的固定路径
    local python_path="/usr/local/python3.9/bin/python3"
    
    # 验证Python路径是否存在
    if [[ ! -f "$python_path" ]]; then
        echo -e "${RED}❌ 错误: 指定的Python路径不存在: $python_path${NC}"
        echo -e "${YELLOW}⚠️ 正在尝试查找Python 3.9...${NC}"
        
        # 尝试查找系统中的Python 3.9
        python_path=$(find /usr -name "python3.9" -type f -executable 2>/dev/null | head -1)
        
        if [[ -z "$python_path" ]]; then
            echo -e "${RED}❌ 错误: 无法在系统中找到Python 3.9，请确保已安装${NC}"
            exit 1
        else
            echo -e "${GREEN}✅ 找到替代Python路径: $python_path${NC}"
        fi
    fi
    
    # 验证Python版本
    python_version=$("$python_path" --version 2>&1)
    echo -e "${GREEN}ℹ️ 将使用: $python_version ($python_path)${NC}"

    # 创建 envs 目录（带权限设置）
    if [[ ! -d "$envs_root" ]]; then
        sudo mkdir -p "$envs_root"
        sudo chmod 755 "$envs_root"  # 设置合理权限
    fi

    # 安装 virtualenv（使用指定的Python路径）
    if ! command -v virtualenv &> /dev/null; then
        echo -e "${GREEN}ℹ️ 检测到未安装 virtualenv，正在安装...${NC}"
        if ! sudo "$python_path" -m pip install virtualenv; then
            echo -e "${RED}❌ 安装 virtualenv 失败，请手动安装后重试${NC}"
            exit 1
        fi
    fi

    # 创建虚拟环境并严格校验 - 使用指定的Python路径
    if [[ ! -f "$venv_path/bin/activate" ]]; then
        echo -e "${GREEN}ℹ️ 正在创建虚拟环境...${NC}"
        virtualenv "$venv_path" --python="$python_path"
        
        # 新增：检查虚拟环境是否创建成功
        if [[ ! -f "$venv_path/bin/activate" ]]; then
            echo -e "${RED}❌ 虚拟环境创建失败，激活文件不存在${NC}"
            exit 1
        fi
        
        # 验证虚拟环境中的Python版本
        source "$venv_path/bin/activate"
        venv_python_version=$(python --version 2>&1)
        deactivate
        
        echo -e "${GREEN}✅ 虚拟环境已创建: $venv_path${NC}"
        echo -e "${GREEN}✅ 虚拟环境Python版本: $venv_python_version${NC}"
    else
        echo -e "${GREEN}✅ 虚拟环境已存在: $venv_path${NC}"
        
        # 验证已存在虚拟环境的Python版本
        source "$venv_path/bin/activate"
        venv_python_version=$(python --version 2>&1)
        deactivate
        
        echo -e "${GREEN}✅ 虚拟环境Python版本: $venv_python_version${NC}"
        
        # 如果虚拟环境中不是Python 3.9，给出警告
        if [[ ! "$venv_python_version" =~ "3.9" ]]; then
            echo -e "${YELLOW}⚠️ 警告: 虚拟环境不是使用Python 3.9创建的！${NC}"
            echo -e "${YELLOW}⚠️ 建议删除并重新创建虚拟环境: rm -rf $venv_path${NC}"
        fi
    fi

    # 配置别名和补全规则
    configure_alias "$project_name" "$venv_path"
}

# 配置别名和补全规则
configure_alias() {
    local project_name="$1"
    local venv_path="$2"
    local activate_cmd="source $venv_path/bin/activate"
    local bashrc="$HOME/.bashrc"

    # 添加别名（带去重处理）
    if ! grep -q "alias $project_name=" "$bashrc"; then
        echo -e "\nalias $project_name='$activate_cmd'" >> "$bashrc"
    else
        echo -e "${GREEN}ℹ️ 别名已存在，跳过添加${NC}"
    fi

    # 添加补全规则（带去重处理）
    local completion_rule="complete -F _venv_complete $project_name"
    if ! grep -q "$completion_rule" "$bashrc"; then
        echo -e "\n# 虚拟环境补全 - $project_name" >> "$bashrc"
        echo "_venv_complete() {" >> "$bashrc"
        echo "    local cur=\${COMP_WORDS[COMP_CWORD]}" >> "$bashrc"
        echo "    COMPREPLY=( \$(compgen -W \"\$(ls /envs | grep -E '^[a-zA-Z0-9_-]+$')\" -- \$cur) )" >> "$bashrc"
        echo "}" >> "$bashrc"
        echo "$completion_rule" >> "$bashrc"
    else
        echo -e "${GREEN}ℹ️ 补全规则已存在，跳过添加${NC}"
    fi

    # 重新加载 .bashrc
    source "$bashrc"
    echo -e "${GREEN}✅ 别名已设置: $project_name${NC}"
    echo "使用方法: $project_name （输入首字母按 Tab 补全）"
    echo -e "${GREEN}当前虚拟环境路径: $venv_path${NC}"
}

# 主执行逻辑
create_venv
project_name=$(get_project_name)
echo -e "\n🎉 所有操作完成，立即生效："
echo "  激活环境: $project_name"
echo "  Tab 补全: 输入 '${project_name:0:1}' 后按 Tab 查看所有别名"