#!/bin/bash
# ============================================================
# DOOBAT - Script de démarrage
# Usage : bash scripts/start.sh [--daemon]
# Copyright 2026 Vincent Gallet - Vincesoft
# ============================================================

set -euo pipefail

PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
VENV_DIR="$PROJECT_DIR/venv"
LOG_DIR="$PROJECT_DIR/logs"
PID_FILE="$PROJECT_DIR/doobat.pid"
DAEMON=false
PYTHON_BIN=""

# Parser les arguments
for arg in "$@"; do
    case $arg in
        --daemon) DAEMON=true ;;
    esac
done

cd "$PROJECT_DIR"

# Vérifications préalables
if [ ! -d "$VENV_DIR" ]; then
    echo "ERREUR : Environnement virtuel non trouvé. Lancez d'abord scripts/install.sh"
    exit 1
fi

if [ ! -f "config.ini" ]; then
    echo "ERREUR : config.ini introuvable. Copiez config.ini.example en config.ini."
    exit 1
fi

for candidate in python3 python py; do
    if command -v "$candidate" &> /dev/null; then
        PYTHON_BIN="$candidate"
        break
    fi
done

if [ -z "$PYTHON_BIN" ]; then
    echo "ERREUR : Python introuvable. Vérifiez que python3, python ou py est disponible."
    exit 1
fi

# Lire host et port depuis config.ini
HOST=$("$PYTHON_BIN" -c "import configparser; c=configparser.ConfigParser(); c.read('config.ini'); print(c.get('SERVER','host','0.0.0.0'))" 2>/dev/null || echo "0.0.0.0")
PORT=$("$PYTHON_BIN" -c "import configparser; c=configparser.ConfigParser(); c.read('config.ini'); print(c.get('SERVER','port','8000'))" 2>/dev/null || echo "8000")

mkdir -p "$LOG_DIR"
source "$VENV_DIR/bin/activate"

echo "============================================================"
echo "  DOOBAT - Démarrage"
echo "  Host : $HOST:$PORT"
echo "  Mode : $([ "$DAEMON" = true ] && echo 'daemon' || echo 'foreground')"
echo "============================================================"

if [ "$DAEMON" = true ]; then
    # Mode daemon : redirection des logs
    nohup uvicorn app:app \
        --host "$HOST" \
        --port "$PORT" \
        --workers 1 \
        --log-level warning \
        --no-access-log \
        >> "$LOG_DIR/uvicorn.log" 2>&1 &
    echo $! > "$PID_FILE"
    echo "  DOOBAT démarré en arrière-plan (PID=$(cat $PID_FILE))"
    echo "  Logs : $LOG_DIR/uvicorn.log"
    echo "  Pour arrêter : kill \$(cat $PID_FILE)"
else
    # Mode foreground
    uvicorn app:app \
        --host "$HOST" \
        --port "$PORT" \
        --workers 1 \
        --log-level warning \
        --no-access-log
fi
