#!/usr/bin/env bash
set -euo pipefail

LOG_DIR="/home/sebas/runtime/logs"
mkdir -p "$LOG_DIR"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG_DIR/ballbox-services.log"
}

restart_agents_db() {
    log "Restarting agents-database..."
    systemctl --user restart agents-database-http.service
    sleep 2
    if curl -fsSL http://127.0.0.1:8091/api/status | grep -q '"ok":true'; then
        log "agents-database OK"
        return 0
    else
        log "agents-database FAILED"
        return 1
    fi
}

restart_personal_agent() {
    log "Restarting personal-agent..."
    systemctl --user restart personal-agent.service
    sleep 3
    if systemctl --user is-active --quiet personal-agent.service; then
        log "personal-agent OK"
        return 0
    else
        log "personal-agent FAILED"
        return 1
    fi
}

restart_nginx() {
    log "Restarting nginx..."
    sudo systemctl restart nginx
    sleep 2
    if systemctl is-active --quiet nginx; then
        log "nginx OK"
        return 0
    else
        log "nginx FAILED"
        return 1
    fi
}

check_all() {
    local failed=0
    
    sleep 3
    
    if curl -fsSL http://127.0.0.1:8091/api/status 2>/dev/null | grep -qi '"ok":.*true'; then
        log "CHECK: agents-db OK"
    else
        log "CHECK: agents-db fail"
        failed=1
    fi
    if systemctl --user is-active --quiet personal-agent.service; then
        log "CHECK: personal-agent OK"
    else
        log "CHECK: personal-agent fail"
        failed=1
    fi
    if systemctl is-active --quiet nginx; then
        log "CHECK: nginx OK"
    else
        log "CHECK: nginx fail"
        failed=1
    fi
    
    return $failed
}

case "${1:-start}" in
    start)
        log "=== Starting all services ==="
        restart_agents_db || log "WARN: agents-db did not start cleanly"
        restart_personal_agent || log "WARN: personal-agent did not start cleanly"
        restart_nginx || log "WARN: nginx did not start cleanly"
        check_all && log "=== All services UP ===" || log "=== Some services FAILED ==="
        ;;
    check)
        log "=== Checking services ==="
        check_all && log "All OK" || log "Some FAILED"
        ;;
    status)
        echo "=== Service Status ==="
        echo "agents-database: $(systemctl --user is-active agents-database-http.service 2>/dev/null || echo 'unknown')"
        echo "personal-agent: $(systemctl --user is-active personal-agent.service 2>/dev/null || echo 'unknown')"
        echo "nginx: $(systemctl is-active nginx 2>/dev/null || echo 'unknown')"
        echo ""
        echo "=== Log (last 20 lines) ==="
        tail -20 "$LOG_DIR/ballbox-services.log"
        ;;
    *)
        echo "Usage: $0 {start|check|status}"
        exit 1
        ;;
esac