#!/bin/bash

# ============================================
# XL监狱综合管理平台 - 前后端编译脚本
# ============================================
# 功能：
# 1. 编译后端 Java 项目
# 2. 编译前端 Vue3 项目
# 3. 生成部署包
#
# 使用方法：
# 1. 修改下面的配置（可选）
# 2. 执行: bash build.sh
#
# 依赖：
# - Maven 3.8+
# - Node.js 16+
# - pnpm
# ============================================

# 配置
PROJECT_DIR="/Volumes/Dpan/github/xlcp"
BACKEND_DIR="${PROJECT_DIR}/backend"
FRONTEND_DIR="${PROJECT_DIR}/frontend"
BACKEND_OUTPUT_DIR="${PROJECT_DIR}/deploy/backend"
FRONTEND_OUTPUT_DIR="${PROJECT_DIR}/deploy/frontend"

# Maven 配置
MAVEN_PROFILE="prod"
JAVA_VERSION="17"

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

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}XL监狱综合管理平台 - 前后端编译脚本${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""

# 检查依赖
echo -e "${BLUE}📋 检查编译环境...${NC}"

# 检查 Maven
if ! command -v mvn &> /dev/null; then
    echo -e "${RED}❌ 错误: 未找到 Maven，请先安装 Maven${NC}"
    exit 1
fi
echo -e "${GREEN}✅ Maven 版本: $(mvn -version | head -1)${NC}"

# 检查 Node.js
if ! command -v node &> /dev/null; then
    echo -e "${RED}❌ 错误: 未找到 Node.js，请先安装 Node.js${NC}"
    exit 1
fi
echo -e "${GREEN}✅ Node.js 版本: $(node -v)${NC}"

# 检查 pnpm
if ! command -v pnpm &> /dev/null; then
    echo -e "${YELLOW}⚠️ 未找到 pnpm，尝试使用 npm...${NC}"
    PACKAGE_MANAGER="npm"
else
    echo -e "${GREEN}✅ pnpm 版本: $(pnpm -v)${NC}"
    PACKAGE_MANAGER="pnpm"
fi

echo ""
echo -e "${GREEN}开始编译...${NC}"
echo ""

# ============================================
# 第一部分：编译后端
# ============================================
echo -e "${BLUE}🏗️  编译后端项目...${NC}"
echo ""

cd "${BACKEND_DIR}"

# 清理并编译
echo -e "${YELLOW}📦 清理并编译后端...${NC}"
mvn clean package -DskipTests -Dmaven.javadoc.skip=true -q

if [ $? -eq 0 ]; then
    echo -e "${GREEN}✅ 后端编译成功！${NC}"
    
    # 查找生成的 JAR 文件
    JAR_FILE=$(find "${BACKEND_DIR}/yudao-server/target" -name "yudao-server-*.jar" 2>/dev/null | head -1)
    if [ -n "$JAR_FILE" ]; then
        echo -e "${GREEN}📁 生成的 JAR 文件: ${JAR_FILE}${NC}"
        
        # 复制到部署目录
        mkdir -p "${BACKEND_OUTPUT_DIR}"
        cp "${JAR_FILE}" "${BACKEND_OUTPUT_DIR}/"
        echo -e "${GREEN}📁 已复制到部署目录: ${BACKEND_OUTPUT_DIR}/$(basename $JAR_FILE)${NC}"
    fi
else
    echo -e "${RED}❌ 后端编译失败！${NC}"
    exit 1
fi

echo ""

# ============================================
# 第二部分：编译前端
# ============================================
echo -e "${BLUE}🎨 编译前端项目...${NC}"
echo ""

cd "${FRONTEND_DIR}"

# 检查依赖是否已安装
if [ ! -d "node_modules" ]; then
    echo -e "${YELLOW}📥 安装前端依赖...${NC}"
    $PACKAGE_MANAGER install
    if [ $? -ne 0 ]; then
        echo -e "${RED}❌ 前端依赖安装失败！${NC}"
        exit 1
    fi
fi

# 清理并编译生产版本
echo -e "${YELLOW}📦 编译前端生产版本...${NC}"
$PACKAGE_MANAGER build:prod

if [ $? -eq 0 ]; then
    echo -e "${GREEN}✅ 前端编译成功！${NC}"
    
    # 复制到部署目录
    mkdir -p "${FRONTEND_OUTPUT_DIR}"
    
    # 复制编译产物
    if [ -d "dist" ]; then
        rm -rf "${FRONTEND_OUTPUT_DIR}/dist"
        cp -r "dist" "${FRONTEND_OUTPUT_DIR}/"
        echo -e "${GREEN}📁 已复制到部署目录: ${FRONTEND_OUTPUT_DIR}/dist${NC}"
    fi
else
    echo -e "${RED}❌ 前端编译失败！${NC}"
    exit 1
fi

echo ""

# ============================================
# 完成
# ============================================
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}🎉 编译完成！${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "${YELLOW}部署文件位置：${NC}"
echo -e "  - 后端: ${BACKEND_OUTPUT_DIR}/"
echo -e "  - 前端: ${FRONTEND_OUTPUT_DIR}/dist/"
echo ""
echo -e "${YELLOW}下一步：${NC}"
echo -e "  1. 部署后端 JAR 文件"
echo -e "  2. 部署前端静态文件"
echo -e "  3. 配置 Nginx"
echo ""
