#!/bin/bash
# ============================================================
# Discord Guard Dashboard - VPS Kurulum & Deploy Scripti
# ============================================================
# Kullanım: chmod +x deploy.sh && ./deploy.sh
# Test edildi: Ubuntu 20.04 / 22.04, Debian 11/12
# ============================================================

set -e  # Herhangi bir hata olursa dur

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

log()    { echo -e "${GREEN}[✔]${NC} $1"; }
warn()   { echo -e "${YELLOW}[!]${NC} $1"; }
error()  { echo -e "${RED}[✘]${NC} $1"; exit 1; }
header() { echo -e "\n${BLUE}═══════════════════════════════════${NC}"; echo -e "${BLUE}  $1${NC}"; echo -e "${BLUE}═══════════════════════════════════${NC}"; }

# ─── 1. Sistem Gereksinimleri ─────────────────────────────────────
header "1/6 - Sistem Gereksinimleri Kontrol Ediliyor"

# Node.js kontrolü
if ! command -v node &>/dev/null; then
    warn "Node.js bulunamadı, kuruluyor..."
    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
    sudo apt-get install -y nodejs
    log "Node.js kuruldu: $(node --version)"
else
    NODE_VER=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
    if [ "$NODE_VER" -lt 18 ]; then
        error "Node.js 18+ gerekli. Mevcut: $(node --version)"
    fi
    log "Node.js mevcut: $(node --version)"
fi

# PM2 kontrolü
if ! command -v pm2 &>/dev/null; then
    warn "PM2 bulunamadı, kuruluyor..."
    sudo npm install -g pm2
    log "PM2 kuruldu: $(pm2 --version)"
else
    log "PM2 mevcut: $(pm2 --version)"
fi

# ffmpeg kontrolü (ses özellikleri için)
if ! command -v ffmpeg &>/dev/null; then
    warn "ffmpeg bulunamadı, kuruluyor..."
    sudo apt-get install -y ffmpeg
    log "ffmpeg kuruldu"
else
    log "ffmpeg mevcut"
fi

# ─── 2. Bağımlılıklar ────────────────────────────────────────────
header "2/6 - Node.js Bağımlılıkları Kuruluyor"

npm install --production
log "npm bağımlılıkları kuruldu"

# ─── 3. .env Dosyası ─────────────────────────────────────────────
header "3/6 - Ortam Değişkenleri"

if [ ! -f ".env" ]; then
    if [ -f ".env.example" ]; then
        cp .env.example .env
        warn ".env dosyası oluşturuldu! Lütfen düzenleyin: nano .env"
        warn "Düzenledikten sonra scripti tekrar çalıştırın."
        exit 0
    else
        error ".env dosyası bulunamadı ve .env.example da yok!"
    fi
else
    log ".env dosyası mevcut"
fi

# .env doğrulama
source .env
[ -z "$DISCORD_TOKEN" ] && error "DISCORD_TOKEN .env dosyasında boş!"
[ -z "$DISCORD_CLIENT_ID" ] && error "DISCORD_CLIENT_ID .env dosyasında boş!"
[ -z "$SESSION_SECRET" ] && error "SESSION_SECRET .env dosyasında boş!"
log ".env doğrulama başarılı"

# ─── 4. Log Dizini ───────────────────────────────────────────────
header "4/6 - Dizinler Hazırlanıyor"

mkdir -p logs music
log "logs/ ve music/ dizinleri hazır"

# ─── 5. Frontend Build ───────────────────────────────────────────
header "5/6 - Frontend Build"

if [ -d "frontend" ] && [ -f "frontend/package.json" ]; then
    cd frontend
    npm install
    npm run build
    cd ..
    log "Frontend başarıyla build edildi"
else
    warn "frontend/ dizini veya package.json bulunamadı, atlanıyor"
fi

# ─── 6. PM2 ile Başlatma ─────────────────────────────────────────
header "6/6 - PM2 ile Başlatılıyor"

# Eski process varsa durdur
pm2 delete discord-guard-dashboard 2>/dev/null || true

# Yeni process başlat
pm2 start ecosystem.config.js --env production

# PM2'yi sistem başlangıcına ekle
pm2 save
pm2 startup 2>/dev/null | tail -1 | bash 2>/dev/null || warn "PM2 startup ayarı için sudo gerekebilir, manuel yapın."

log "PM2 sisteme kaydedildi (sunucu yeniden başlasa da çalışır)"

# ─── Özet ────────────────────────────────────────────────────────
echo ""
echo -e "${GREEN}╔════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║   🚀 DEPLOY BAŞARILI!                  ║${NC}"
echo -e "${GREEN}╠════════════════════════════════════════╣${NC}"
echo -e "${GREEN}║                                        ║${NC}"
echo -e "${GREEN}║  Dashboard: http://$(hostname -I | awk '{print $1}'):${PORT:-3000}   ${NC}"
echo -e "${GREEN}║                                        ║${NC}"
echo -e "${GREEN}║  PM2 Komutları:                        ║${NC}"
echo -e "${GREEN}║    pm2 status                          ║${NC}"
echo -e "${GREEN}║    pm2 logs discord-guard-dashboard    ║${NC}"
echo -e "${GREEN}║    pm2 restart discord-guard-dashboard ║${NC}"
echo -e "${GREEN}║    pm2 stop discord-guard-dashboard    ║${NC}"
echo -e "${GREEN}║                                        ║${NC}"
echo -e "${GREEN}╚════════════════════════════════════════╝${NC}"
