#!/usr/bin/env bash
#
# Wrapper script pour l'orchestrateur Skull Pi
# Lance l'orchestrateur avec l'environnement virtuel Python
#

set -Eeuo pipefail

# Configuration
SKULL_ROOT="/opt/Skull"
VENV_PATH="${SKULL_ROOT}/venv"
APP_PATH="${SKULL_ROOT}/apps"
LOG_PATH="${SKULL_ROOT}/logs"

# Fonction de logging
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >&2
}

# Vérifications préalables
check_prerequisites() {
    log "Vérification des prérequis..."

    # Vérifier environnement virtuel
    if [[ ! -d "$VENV_PATH" ]]; then
        log "ERREUR: Environnement virtuel non trouvé: $VENV_PATH"
        exit 1
    fi
    if [[ ! -f "$VENV_PATH/bin/activate" ]]; then
        log "ERREUR: Script d'activation non trouvé: $VENV_PATH/bin/activate"
        exit 1
    fi
    if [[ ! -x "$VENV_PATH/bin/python" ]]; then
        log "ERREUR: Interpréteur Python du venv introuvable: $VENV_PATH/bin/python"
        exit 1
    fi

    # Vérifier répertoire applications
    if [[ ! -d "$APP_PATH" ]]; then
        log "ERREUR: Répertoire applications non trouvé: $APP_PATH"
        exit 1
    fi
    if [[ ! -d "$APP_PATH/orchestrator" ]]; then
        log "ERREUR: Module orchestrator non trouvé: $APP_PATH/orchestrator"
        exit 1
    fi

    # Créer répertoire logs si nécessaire
    mkdir -p "$LOG_PATH"
    if [[ ! -w "$LOG_PATH" ]]; then
        log "ERREUR: Pas de permission d'écriture sur: $LOG_PATH"
        exit 1
    fi

    log "Prérequis OK"
}

# Activation environnement virtuel
activate_venv() {
    log "Activation environnement virtuel..."
    # shellcheck source=/dev/null
    source "$VENV_PATH/bin/activate"

    if [[ -z "${VIRTUAL_ENV:-}" ]]; then
        log "ERREUR: Échec activation environnement virtuel"
        exit 1
    fi

    log "Environnement virtuel activé: $VIRTUAL_ENV"
    python --version
}

# Gestion des signaux
cleanup() {
    local exit_code=$?
    log "Signal reçu, nettoyage en cours..."
    sleep 2
    log "Orchestrateur arrêté (code: $exit_code)"
    exit "$exit_code"
}

trap cleanup SIGTERM SIGINT SIGHUP

main() {
    log "Démarrage orchestrateur Skull Pi..."

    # Vérifications
    check_prerequisites

    # Activer environnement
    activate_venv

    # Positionner le CWD sur le dossier des apps (ou directement sur l'orchestrateur)
    cd "$APP_PATH"

    # Configurer PYTHONPATH pour que 'import orchestrator' fonctionne
    export PYTHONPATH="$APP_PATH:${PYTHONPATH:-}"

    # Variables d'environnement pour l'orchestrateur
    export SKULL_ROOT
    export SKULL_LOG_PATH="$LOG_PATH"
    export SKULL_CONFIG_PATH="${SKULL_ROOT}/config"
    export SKULL_SONGS_PATH="${SKULL_ROOT}/songs"

    # Vérifier maintenant que le module est importable (après PYTHONPATH et cd)
    if ! python -c "import orchestrator" >/dev/null 2>&1; then
        log "ERREUR: Module orchestrator non importable (PYTHONPATH=$PYTHONPATH ; CWD=$(pwd))"
        exit 1
    fi

    log "Lancement du module orchestrator..."
    log "PYTHONPATH: $PYTHONPATH"
    log "CWD: $(pwd)"

    # Démarrer l'orchestrateur (utilise le __main__ de orchestrator/main.py)
    exec python -m orchestrator.main "$@"
}

if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
    main "$@"
fi
