#!/bin/bash
# =============================================================================
# FF AI Workspace 环境配置设置脚本
# =============================================================================
#
# 用途: 快速设置开发/UAT/生产环境配置
# 用法: bash scripts/env/setup-env.sh [environment]
#
# =============================================================================

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

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 打印带颜色的信息
print_info() {
    echo -e "${BLUE}ℹ️  $1${NC}"
}

print_success() {
    echo -e "${GREEN}✅ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠️  $1${NC}"
}

print_error() {
    echo -e "${RED}❌ $1${NC}"
}

# 检查是否在项目根目录
if [ ! -f "package.json" ]; then
    print_error "请在项目根目录运行此脚本"
    exit 1
fi

# 获取环境参数，默认为 development
ENV=${1:-development}

print_info "设置环境: $ENV"

# 验证环境参数
case "$ENV" in
    development|dev)
        ENV="development"
        SOURCE_FILE=".env.example"
        ;;
    uat)
        ENV="uat"
        SOURCE_FILE=".env.uat.example"
        ;;
    production|prod)
        ENV="production"
        SOURCE_FILE=".env.production.example"
        ;;
    *)
        print_error "未知环境: $ENV"
        print_info "支持的环境: development, uat, production"
        exit 1
        ;;
esac

# 检查源配置文件是否存在
if [ ! -f "$SOURCE_FILE" ]; then
    print_warning "$SOURCE_FILE 不存在，使用 .env.example"
    SOURCE_FILE=".env.example"
fi

if [ ! -f "$SOURCE_FILE" ]; then
    print_error "配置模板文件不存在: $SOURCE_FILE"
    exit 1
fi

# 备份现有的 .env 文件
if [ -f ".env" ]; then
    BACKUP_FILE=".env.backup.$(date +%Y%m%d_%H%M%S)"
    print_warning ".env 文件已存在，备份到: $BACKUP_FILE"
    cp .env "$BACKUP_FILE"
fi

# 复制配置文件到根目录
cp "$SOURCE_FILE" .env
print_success "已创建根目录 .env 文件（从 $SOURCE_FILE）"

# 为子项目创建软链接或复制文件
create_env_link() {
    local dir=$1
    local target="../.env"
    
    if [ -d "$dir" ]; then
        # 备份子项目现有的 .env 文件
        if [ -f "$dir/.env" ]; then
            local backup="$dir/.env.backup.$(date +%Y%m%d_%H%M%S)"
            print_warning "$dir/.env 已存在，备份到: $backup"
            mv "$dir/.env" "$backup"
        fi
        
        # 尝试创建软链接
        cd "$dir"
        if ln -sf "$target" .env 2>/dev/null; then
            print_success "已为 $dir/ 创建软链接"
        else
            # 如果软链接失败，复制文件
            cp "../.env" .env
            print_success "已为 $dir/ 复制配置文件"
        fi
        cd - > /dev/null
    else
        print_warning "$dir 目录不存在，跳过"
    fi
}

# 为各子项目设置配置
print_info "配置子项目..."
create_env_link "backend"
create_env_link "frontend"
create_env_link "docker"

# 提示用户编辑配置
echo ""
print_success "环境配置设置完成！"
echo ""
print_warning "下一步操作："
echo "  1. 编辑 .env 文件，填入实际的配置值"
echo "  2. 特别注意以下必需配置："
echo "     - DATABASE_URL (数据库连接)"
echo "     - POSTGRES_PASSWORD (数据库密码)"
echo "     - REDIS_PASSWORD (Redis 密码)"
echo "     - JWT_SECRET (JWT 密钥，至少32字符)"
echo "     - AUDIT_HMAC_SECRET (审计HMAC密钥，至少32字符)"
echo ""
print_info "验证配置: bash scripts/env/validate-env.sh"

