#!/bin/bash

# Cron Job Setup for Notion↔GitHub Sync System
# This script helps set up automatic syncs via cron

set -e

echo "⏰ Setting up Cron Job for Notion↔GitHub Sync"
echo "=============================================="

# Check if running as root
if [ "$EUID" -ne 0 ]; then 
  echo "⚠️  Running as non-root user"
  echo "   Cron job will be set up for current user: $(whoami)"
fi

# Get script directory
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SYNC_LOG="$SCRIPT_DIR/sync.log"
CRON_JOB=""

# Ask for sync interval
echo ""
echo "Select sync interval:"
echo "1) Every 15 minutes"
echo "2) Every 30 minutes"
echo "3) Every hour"
echo "4) Every 2 hours"
echo "5) Custom interval"
echo ""
read -p "Enter choice (1-5): " INTERVAL_CHOICE

case $INTERVAL_CHOICE in
  1)
    CRON_SCHEDULE="*/15 * * * *"
    echo "✅ Selected: Every 15 minutes"
    ;;
  2)
    CRON_SCHEDULE="*/30 * * * *"
    echo "✅ Selected: Every 30 minutes"
    ;;
  3)
    CRON_SCHEDULE="0 * * * *"
    echo "✅ Selected: Every hour"
    ;;
  4)
    CRON_SCHEDULE="0 */2 * * *"
    echo "✅ Selected: Every 2 hours"
    ;;
  5)
    read -p "Enter custom cron schedule (e.g., '*/15 * * * *'): " CUSTOM_SCHEDULE
    CRON_SCHEDULE="$CUSTOM_SCHEDULE"
    echo "✅ Selected: Custom schedule '$CRON_SCHEDULE'"
    ;;
  *)
    echo "❌ Invalid choice, using default (every 15 minutes)"
    CRON_SCHEDULE="*/15 * * * *"
    ;;
esac

# Ask for dry run mode
echo ""
read -p "Run in dry-run mode? (y/N): " DRY_RUN_INPUT
if [[ "$DRY_RUN_INPUT" =~ ^[Yy]$ ]]; then
  DRY_RUN="DRY_RUN=true"
  echo "✅ Will run in dry-run mode (no changes made)"
else
  DRY_RUN=""
  echo "✅ Will run in live mode (changes will be made)"
fi

# Build cron command
CRON_COMMAND="cd $SCRIPT_DIR && $DRY_RUN npm run run-all >> $SYNC_LOG 2>&1"
CRON_JOB="$CRON_SCHEDULE $CRON_COMMAND"

echo ""
echo "📋 Cron Job Details:"
echo "-------------------"
echo "Schedule: $CRON_SCHEDULE"
echo "Command: $CRON_COMMAND"
echo "Log file: $SYNC_LOG"
echo "Script dir: $SCRIPT_DIR"

# Ask for confirmation
echo ""
read -p "Add this cron job? (y/N): " CONFIRM
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
  echo "❌ Cron job setup cancelled"
  exit 0
fi

# Add to crontab
echo ""
echo "🔧 Adding cron job..."
if [ "$EUID" -eq 0 ]; then
  # Root user - add to system crontab
  (crontab -l 2>/dev/null || true; echo "$CRON_JOB") | crontab -
  echo "✅ Added to system crontab"
else
  # Regular user - add to user crontab
  (crontab -l 2>/dev/null || true; echo "$CRON_JOB") | crontab -
  echo "✅ Added to user crontab for $(whoami)"
fi

# Create log file
echo "📝 Creating log file..."
touch "$SYNC_LOG"
chmod 644 "$SYNC_LOG"
echo "✅ Created log file: $SYNC_LOG"

# Create log rotation
echo "🔄 Setting up log rotation..."
LOG_ROTATE_CONF="/etc/logrotate.d/notion-github-sync"
if [ "$EUID" -eq 0 ]; then
  cat > "$LOG_ROTATE_CONF" << EOF
$SYNC_LOG {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 644 $(whoami) $(whoami)
}
EOF
  echo "✅ Created log rotation config: $LOG_ROTATE_CONF"
else
  echo "⚠️  Skipping log rotation setup (requires root)"
  echo "   Manual log cleanup recommended for $SYNC_LOG"
fi

# Test cron job syntax
echo ""
echo "🧪 Testing cron job..."
if crontab -l | grep -q "$SCRIPT_DIR"; then
  echo "✅ Cron job added successfully"
  echo ""
  echo "📋 Current crontab:"
  echo "-------------------"
  crontab -l | grep -A2 -B2 "$SCRIPT_DIR"
else
  echo "❌ Could not verify cron job was added"
  echo "   Please check manually with: crontab -l"
fi

echo ""
echo "=============================================="
echo "🎉 Cron job setup completed!"
echo ""
echo "📊 Monitoring:"
echo "   View logs: tail -f $SYNC_LOG"
echo "   Check sync state: cat $SCRIPT_DIR/sync-state.json"
echo "   Manual run: cd $SCRIPT_DIR && npm run run-all"
echo ""
echo "🛠️  Management:"
echo "   Edit cron: crontab -e"
echo "   List cron: crontab -l"
echo "   Remove cron: crontab -r (WARNING: removes ALL cron jobs)"
echo ""
echo "🔧 Troubleshooting:"
echo "   Check permissions: ls -la $SCRIPT_DIR"
echo "   Test manually: cd $SCRIPT_DIR && $DRY_RUN npm run sync-notion-to-github"
echo "   View errors: grep -i error $SYNC_LOG"
echo ""
echo "⏰ Next sync: According to schedule: $CRON_SCHEDULE"