#!/bin/bash
# ╔══════════════════════════════════════════════════════════════════╗
# ║   Discord Guard Dashboard — Watchdog (Otomatik Yeniden Başlat)  ║
# ║   cPanel Cron Job olarak ayarlayın:                             ║
# ║   */5 * * * * /home/KULLANICI_ADI/PROJE_KLASORU/cpanel_watchdog.sh ║
# ╚══════════════════════════════════════════════════════════════════╝

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PID_FILE="$SCRIPT_DIR/.app.pid"
LOG_FILE="$SCRIPT_DIR/logs/watchdog.log"
START_SCRIPT="$SCRIPT_DIR/cpanel_start.sh"

# Log fonksiyonu
wlog() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

# .env yükle
if [ -f "$SCRIPT_DIR/.env" ]; then
  set -a; source "$SCRIPT_DIR/.env"; set +a
fi

# Watchdog log boyutunu kontrol et (1MB üzeri rotasyon)
if [ -f "$LOG_FILE" ] && [ "$(wc -c < "$LOG_FILE" 2>/dev/null || echo 0)" -gt 1048576 ]; then
  mv "$LOG_FILE" "${LOG_FILE%.log}_$(date +%Y%m%d).log"
fi

# Süreç çalışıyor mu?
RUNNING=false

if [ -f "$PID_FILE" ]; then
  PID=$(cat "$PID_FILE" 2>/dev/null)
  if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
    RUNNING=true
  fi
fi

# Port üzerinden de kontrol et
APP_PORT="${PORT:-3000}"
if command -v lsof &>/dev/null; then
  PORT_PID=$(lsof -ti :"$APP_PORT" 2>/dev/null || true)
  if [ -n "$PORT_PID" ]; then
    RUNNING=true
  fi
fi

if [ "$RUNNING" = false ]; then
  wlog "UYARI: Uygulama çalışmıyor, yeniden başlatılıyor..."
  bash "$START_SCRIPT" >> "$LOG_FILE" 2>&1
  if [ $? -eq 0 ]; then
    wlog "BAŞARILI: Uygulama yeniden başlatıldı"
  else
    wlog "HATA: Yeniden başlatma başarısız!"
  fi
else
  # Her saat başı normal çalışma durumunu logla
  MINUTE=$(date +%M)
  if [ "$MINUTE" = "00" ]; then
    PID_DISPLAY=$(cat "$PID_FILE" 2>/dev/null || echo "?")
    wlog "OK: Uygulama çalışıyor (PID: $PID_DISPLAY)"
  fi
fi
