#!/usr/bin/env bash
# Kjører oppgaver sekvensielt til ingen flere er tilgjengelige.
# Venter mellom sesjoner. Stopper når alt er gjort, blokkert, eller trenger avklaring.
# Ved API-feil (500/529) venter scriptet og prøver igjen automatisk.
#
# Bruk:
#   ./scripts/run-tasks.sh              # kjør til ferdig/blokkert
#   ./scripts/run-tasks.sh --interval 60  # 60 sek mellom oppgaver (default: 30)

set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
INTERVAL=30
MAX_API_RETRIES=10
API_RETRY_DELAY=60  # sekunder mellom retries ved API-feil

while [[ $# -gt 0 ]]; do
    case $1 in
        --interval) INTERVAL=$2; shift 2 ;;
        *) echo "Ukjent flagg: $1"; exit 1 ;;
    esac
done

cd "$ROOT"
completed=0
api_failures=0

while true; do
    # Sjekk om det finnes noe å gjøre
    dry_output=$(./scripts/run-next-task.sh --dry 2>&1)

    if echo "$dry_output" | grep -q "Alle oppgaver er gjort"; then
        echo ""
        echo "=== Alle oppgaver er gjort! ($completed fullført i denne kjøringen) ==="
        ./scripts/run-next-task.sh --status
        break
    fi

    if echo "$dry_output" | grep -q "Ingen tilgjengelige"; then
        echo ""
        echo "=== Ingen tilgjengelige oppgaver. ($completed fullført i denne kjøringen) ==="
        echo "Gjenstående oppgaver er blokkert, har åpne spørsmål, eller venter på pågående arbeid."
        echo ""
        ./scripts/run-next-task.sh --status
        break
    fi

    echo "$dry_output"
    echo ""

    # Kjør oppgaven
    exit_code=0
    ./scripts/run-next-task.sh || exit_code=$?

    if [[ $exit_code -eq 0 ]]; then
        completed=$((completed + 1))
        api_failures=0  # Nullstill ved suksess
        echo ""
        echo "--- Oppgave ferdig (#$completed). Neste om ${INTERVAL}s (Ctrl-C for å stoppe) ---"
        echo ""
        sleep "$INTERVAL"
    else
        # Sjekk om oppgaven ble tilbakestilt (typisk API-feil/krasj)
        # vs. om den ble markert [?] eller [!] (bevisst blokkering)
        status_output=$(./scripts/run-next-task.sh --dry 2>&1)
        if echo "$status_output" | grep -q "Ingen tilgjengelige\|Alle oppgaver er gjort"; then
            # Oppgaven ble blokkert [?]/[!], eller alt er gjort — stopp
            echo ""
            echo "--- Sesjon feilet og ingen oppgaver tilgjengelig. Stopper. ---"
            ./scripts/run-next-task.sh --status
            break
        fi

        # Oppgaven ble tilbakestilt til [ ] — sannsynligvis API-feil
        api_failures=$((api_failures + 1))
        if [[ $api_failures -ge $MAX_API_RETRIES ]]; then
            echo ""
            echo "--- $MAX_API_RETRIES feil på rad. Stopper. ---"
            ./scripts/run-next-task.sh --status
            break
        fi

        delay=$((API_RETRY_DELAY * api_failures))  # Lineær backoff: 60, 120, 180...
        echo ""
        echo "--- Sesjon feilet (exit $exit_code). Forsøk $api_failures/$MAX_API_RETRIES. Venter ${delay}s... ---"
        echo ""
        sleep "$delay"
    fi
done
