#!/usr/bin/env bash
# Load-gated importer for Telegram Lite archive JSONL packages.

set -Eeuo pipefail

APP_DIR="${ECHO_APP_DIR:-/opt/echo-sounder}"
CONTAINER_APP_DIR="${ECHO_CONTAINER_APP_DIR:-/app}"
QUEUE_DIR="${TELEGRAM_LITE_ARCHIVE_QUEUE_DIR:-$APP_DIR/reports/telegram_lite_archive_queue}"
PENDING_DIR="$QUEUE_DIR/pending"
DONE_DIR="$QUEUE_DIR/done"
FAILED_DIR="$QUEUE_DIR/failed"
LOCK_FILE="${TELEGRAM_LITE_ARCHIVE_LOCK:-/tmp/echo_telegram_lite_archive_import.lock}"
LOG_FILE="${TELEGRAM_LITE_ARCHIVE_LOG:-$APP_DIR/reports/telegram_lite_archive_queue/import.log}"
MAX_LOAD_1M="${TELEGRAM_LITE_ARCHIVE_MAX_LOAD_1M:-5.0}"
IMPORT_BATCH_SIZE="${TELEGRAM_LITE_ARCHIVE_IMPORT_BATCH_SIZE:-500}"
TARGETS="${TELEGRAM_LITE_ARCHIVE_TARGETS:-echo,qazlake}"

mkdir -p "$PENDING_DIR" "$DONE_DIR" "$FAILED_DIR" "$(dirname "$LOCK_FILE")" "$(dirname "$LOG_FILE")"

exec 9<>"$LOCK_FILE"
if ! flock -n 9; then
    echo "[$(date -Is)] skipped lock_held" >> "$LOG_FILE"
    exit 0
fi

load_1m="$(awk '{print $1}' /proc/loadavg 2>/dev/null || echo 99)"
if ! awk -v load_value="$load_1m" -v max_value="$MAX_LOAD_1M" 'BEGIN {exit !(load_value <= max_value)}'; then
    echo "[$(date -Is)] skipped load_high load_1m=$load_1m max=$MAX_LOAD_1M" >> "$LOG_FILE"
    exit 0
fi

next_file="$(find "$PENDING_DIR" -maxdepth 1 -type f -name '*.jsonl' | sort | head -n 1)"
if [[ -z "$next_file" ]]; then
    echo "[$(date -Is)] idle no_pending" >> "$LOG_FILE"
    exit 0
fi

cd "$APP_DIR"
base_name="$(basename "$next_file")"
report_base="$QUEUE_DIR/${base_name%.jsonl}"
container_next_file="${next_file/#$APP_DIR/$CONTAINER_APP_DIR}"
container_report_base="${report_base/#$APP_DIR/$CONTAINER_APP_DIR}"
echo "[$(date -Is)] start file=$base_name targets=$TARGETS batch=$IMPORT_BATCH_SIZE load_1m=$load_1m" >> "$LOG_FILE"

IFS=',' read -r -a target_list <<< "$TARGETS"
for target in "${target_list[@]}"; do
    target="$(echo "$target" | xargs)"
    [[ -z "$target" ]] && continue
    docker compose exec -T web env PYTHONDONTWRITEBYTECODE=1 \
        python scripts/telegram_lite_archive_intake.py \
        --input-jsonl "$container_next_file" \
        --apply \
        --target "$target" \
        --skip-target-summary \
        --import-batch-size "$IMPORT_BATCH_SIZE" \
        --report "${container_report_base}.${target}.json" >> "$LOG_FILE" 2>&1
done

mv "$next_file" "$DONE_DIR/$base_name"
echo "[$(date -Is)] done file=$base_name" >> "$LOG_FILE"
