#!/bin/bash

# ==============================================================================
# iRelax Project - Integrated Deployment Script (post-receive hook)
# ==============================================================================

# 1. TARGET PATHS (Nginx & PM2)
TARGET_WEBSITE="/home/ti/projects/MyNginxMain/nginx/html/homaroma.shop/website"
TARGET_ADMIN="/home/ti/projects/MyNginxMain/nginx/html/homaroma.shop/admin"
TARGET_BACKEND="/home/ti/projects/homaroma-api"
TARGET_SSR="/home/ti/projects/homaroma-ssr"      # <-- Next.js SSR App

# 2. REPOSITORY CONFIG
REPO="/home/ti/git/homaroma.git"
BRANCH="master"
TEMP_DIR="/tmp/homaroma_build_$(date +%s)"

# 3. BINARY PATHS & PM2
BUN="/home/ti/.bun/bin/bun"
PM2="/home/ti/.nvm/versions/node/v22.17.1/bin/pm2"
PM2_NAME_BACKEND="homaroma-backend"
PM2_NAME_SSR="homaroma-ssr"                       # <-- PM2 process name สำหรับ SSR
export PATH="$PATH:/home/ti/.bun/bin:/home/ti/.nvm/versions/node/v22.17.1/bin"

# 4. BUILD ENVIRONMENT
export VITE_API_URL="https://api.homaroma.shop/api"
export VITE_LIFF_ID="2009944751-5IYZT5kH"  # <-- สำหรับ LINE LIFF
export NEXT_PUBLIC_API_URL="https://api.homaroma.shop/api"  # <-- สำหรับ SSR (Client-side fetch)

# Port ของ Next.js SSR (Nginx จะ proxy_pass มาที่นี่)
SSR_PORT=3002

# ------------------------------------------------------------------------------
# START DEPLOYMENT
# ------------------------------------------------------------------------------
set -e
echo "------- 🚀 Starting Full Deployment: iRelax Platform -------"

# A. Prepare Temp Source from Checkout
echo "Cloning branch $BRANCH to temporary directory: $TEMP_DIR"
mkdir -p $TEMP_DIR
git --work-tree=$TEMP_DIR --git-dir=$REPO checkout -f $BRANCH

cd $TEMP_DIR
echo "Installing monorepo dependencies..."
$BUN install

# B. Build & Deploy WEBSITE (Frontend SPA)
echo ">>> Building Website..."
cd apps/website
$BUN run build
echo "Deploying Website to $TARGET_WEBSITE..."
mkdir -p $TARGET_WEBSITE
rm -rf $TARGET_WEBSITE/*
cp -rv dist/* $TARGET_WEBSITE/
cd ../..

# C. Build & Deploy ADMIN PANEL
echo ">>> Building Admin Panel..."
cd apps/admin
$BUN run build
echo "Deploying Admin Panel to $TARGET_ADMIN..."
mkdir -p $TARGET_ADMIN
rm -rf $TARGET_ADMIN/*
cp -rv dist/* $TARGET_ADMIN/
cd ../..

# D. Deploy & Manage BACKEND (API)
echo ">>> Updating Backend at $TARGET_BACKEND..."
mkdir -p $TARGET_BACKEND

# Sync Backend Source (--exclude .env เพื่อป้องกันการลบ .env บน server!)
rsync -av --delete \
  --exclude='.env' \
  --exclude='public/' \
  --exclude='node_modules/' \
  apps/backend/ $TARGET_BACKEND/

# Sync Shared Packages
mkdir -p $TARGET_BACKEND/packages
rsync -av packages/ $TARGET_BACKEND/packages/

cd $TARGET_BACKEND
echo "Installing backend dependencies..."
$BUN install

# สร้าง public/ folder สำหรับ static files (upload images)
mkdir -p $TARGET_BACKEND/public

# Generate Prisma Client (สำคัญมาก! ต้องรันทุกครั้งหลัง install)
echo ">>> Generating Prisma Client..."
$BUN x prisma generate

# E. Database Migration (Safe Method)
if [ -f ".env" ]; then
    echo ">>> Running Prisma Migrate Deploy..."
    $BUN x prisma migrate deploy
else
    echo "⚠️  Warning: .env not found at $TARGET_BACKEND/.env"
    echo "   Please create it manually once: see serverinfo/text.txt for template"
    echo "   Skipping migrations this time."
fi

# F. PM2 Management - BACKEND
echo ">>> Managing PM2 Process: $PM2_NAME_BACKEND..."
$PM2 restart $PM2_NAME_BACKEND 2>/dev/null || \
$PM2 start src/index.ts --name $PM2_NAME_BACKEND --interpreter $BUN
echo "✅ PM2 process '$PM2_NAME_BACKEND' is running."

# G. Build & Deploy SSR (Next.js)
echo ">>> Building Next.js SSR App inside monorepo temp dir..."
cd $TEMP_DIR/apps/ssr
$BUN run build   # build จาก monorepo (workspace:* resolve ได้)

echo ">>> Syncing built SSR App to $TARGET_SSR..."
mkdir -p $TARGET_SSR

# Sync ทั้ง source + .next/ ไปยัง TARGET_SSR
rsync -av --delete \
  --exclude='.env' \
  --exclude='.env.local' \
  --exclude='node_modules/' \
  $TEMP_DIR/apps/ssr/ $TARGET_SSR/

# Sync packages ไปด้วย
mkdir -p $TARGET_SSR/packages
rsync -av $TEMP_DIR/packages/ $TARGET_SSR/packages/

# Sync root node_modules ไปยัง TARGET_SSR
# (bun workspace ติดตั้ง next ไว้ที่ root node_modules ไม่ใช่ apps/ssr/node_modules)
echo ">>> Syncing root node_modules to $TARGET_SSR..."
rsync -a --delete $TEMP_DIR/node_modules/ $TARGET_SSR/node_modules/

# H. PM2 Management - SSR Next.js
cd $TARGET_SSR
echo ">>> Managing PM2 Process: $PM2_NAME_SSR..."
$PM2 restart $PM2_NAME_SSR 2>/dev/null || \
$PM2 start $TARGET_SSR/node_modules/.bin/next --name $PM2_NAME_SSR \
  -- start -p $SSR_PORT
echo "✅ PM2 process '$PM2_NAME_SSR' is running on port $SSR_PORT."

# I. Cleanup
echo "Cleaning up build artifacts..."
rm -rf $TEMP_DIR

echo "------- ✅ ALL DEPLOYMENTS COMPLETED SUCCESSFULLY -------"
echo ""
echo "📋 Service Summary:"
echo "   🌐 Website (SPA)  → https://homaroma.shop"
echo "   🔧 Admin Panel    → https://admin.homaroma.shop"
echo "   🔌 API Backend    → https://api.homaroma.shop  (PM2: $PM2_NAME_BACKEND)"
echo "   🚀 SSR Next.js    → https://ssr.homaroma.shop  (PM2: $PM2_NAME_SSR, Port: $SSR_PORT)"
