#!/bin/bash
# 9Router - Setup Auto-Scan on Linux (Cron)
# Usage: ./setup-scheduler.sh

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"

echo "============================================"
echo " 9Router - Auto-Scan Setup (Linux/Cron)"
echo "============================================"
echo ""

# Load .env
ENV_FILE="$PROJECT_ROOT/.env"
if [[ -f "$ENV_FILE" ]]; then
    echo "Loading config from .env..."
    set -a
    source "$ENV_FILE"
    set +a
fi

# Check password
if [[ -z "$NINEROUTER_PASSWORD" ]]; then
    echo "ERROR: NINEROUTER_PASSWORD is not set!"
    echo "Please edit .env and set NINEROUTER_PASSWORD"
    exit 1
fi

# Detect Python
PYTHON_CMD=""
if command -v python3 &> /dev/null; then
    PYTHON_CMD="python3"
elif command -v python &> /dev/null; then
    PYTHON_CMD="python"
else
    echo "ERROR: Python not found!"
    echo "Please install Python or set PYTHON_EXE in .env"
    exit 1
fi

PYTHON_PATH=$(which "$PYTHON_CMD")
echo "Python: $PYTHON_PATH"
echo "Project root: $PROJECT_ROOT"
echo ""

# Use run-scan.sh as the cron entry point (handles .env loading internally)
RUNNER_SCRIPT="$SCRIPT_DIR/run-scan.sh"
if [[ ! -x "$RUNNER_SCRIPT" ]]; then
    chmod +x "$RUNNER_SCRIPT"
fi

echo "=== Cron Setup ==="
echo "This will create a cron job to run scan via run-scan.sh."
echo ""
echo "Schedule options:"
echo "  1. At login/reboot (recommended)"
echo "  2. Daily at specific time"
echo "  3. Hourly"
echo ""
read -p "Choose option (1-3) [1]: " SCHEDULE_CHOICE
SCHEDULE_CHOICE="${SCHEDULE_CHOICE:-1}"

case "$SCHEDULE_CHOICE" in
    1)
        # @reboot + delay to let services come up
        CRON_CMD="@reboot sleep 300 && $RUNNER_SCRIPT"
        CRON_DESC="Run once at system startup (5 min delay)"
        ;;
    2)
        read -p "Enter time (HH:MM) [09:00]: " TIME_INPUT
        TIME_INPUT="${TIME_INPUT:-09:00}"
        HOUR="${TIME_INPUT%%:*}"
        MINUTE="${TIME_INPUT##*:}"
        CRON_CMD="$MINUTE $HOUR * * * $RUNNER_SCRIPT"
        CRON_DESC="Run daily at $TIME_INPUT"
        ;;
    3)
        CRON_CMD="0 * * * * $RUNNER_SCRIPT"
        CRON_DESC="Run every hour"
        ;;
    *)
        echo "Invalid option. Using default (login/reboot)..."
        CRON_CMD="@reboot sleep 300 && $RUNNER_SCRIPT"
        CRON_DESC="Run once at system startup (5 min delay)"
        ;;
esac

echo ""
echo "Schedule: $CRON_DESC"
echo "Command:  $CRON_CMD"
echo ""

# Add to crontab (idempotent: remove existing 9router entry first)
EXISTING=$(crontab -l 2>/dev/null | grep -F "run-scan.sh" | grep -F "9router" || true)
if [[ -n "$EXISTING" ]]; then
    echo "Removing existing 9router cron entry..."
    (crontab -l 2>/dev/null | grep -v -F "run-scan.sh" | grep -v -F "9router_daily_combo_model_scan") | crontab -
fi

(crontab -l 2>/dev/null; echo "$CRON_CMD") | crontab -

echo "SUCCESS - Cron job created!"
echo ""
echo "To view cron jobs:"
echo "  crontab -l"
echo ""
echo "To remove:"
echo "  crontab -e  # then delete the run-scan.sh line"
echo ""
echo "To view logs:"
echo "  tail -f ~/.local/share/9router/audit/*.log 2>/dev/null || echo 'No logs yet'"
