#!/usr/bin/env bash

set -euo pipefail

# Source common functions
SCRIPT_DIR=$(cd $(dirname $0);pwd)
source "${SCRIPT_DIR}/common.sh"

declare -a E2E_RUN_SUMMARY=()
E2E_RUN_SUMMARY_PRINTED=0
E2E_RUN_TOTAL_START_SECONDS=${SECONDS}

record_e2e_run_summary() {
    local name=$1
    local detail=$2

    E2E_RUN_SUMMARY+=("${name}|${detail}")
}

run_timed_e2e_script() {
    local name=$1
    shift
    local start_seconds=${SECONDS}

    if "$@"; then
        record_e2e_run_summary "${name}" "$((SECONDS - start_seconds))s"
        return 0
    fi

    record_e2e_run_summary "${name}" "failed after $((SECONDS - start_seconds))s"
    return 1
}

print_e2e_run_summary() {
    local item
    local name
    local detail

    if [ "${E2E_RUN_SUMMARY_PRINTED}" -eq 1 ]; then
        return 0
    fi

    E2E_RUN_SUMMARY_PRINTED=1
    log "e2e run summary:"
    for item in "${E2E_RUN_SUMMARY[@]}"; do
        name=${item%%|*}
        detail=${item#*|}
        log "  - ${name}: ${detail}"
    done
    log "  - total: $((SECONDS - E2E_RUN_TOTAL_START_SECONDS))s"
}

main() {
    trap 'print_e2e_run_summary' EXIT

    run_timed_e2e_script "bootstrap" bash "${SCRIPT_DIR}/e2e-bootstrap.sh"
    run_timed_e2e_script "install boto3" bash -lc 'python3 -c "import boto3" 2>/dev/null || pip3 install boto3'
    run_timed_e2e_script "install dataclasses" bash -lc 'python3 -c "import dataclasses" 2>/dev/null || pip3 install dataclasses'

    run_timed_e2e_script "default" bash "${SCRIPT_DIR}/../default/run.sh" --skip-bootstrap
    run_timed_e2e_script "multi-readers" bash "${SCRIPT_DIR}/../multi-readers/run.sh" --skip-bootstrap
    run_timed_e2e_script "multi-shards" bash "${SCRIPT_DIR}/../multi-shards/run.sh" --skip-bootstrap
    run_timed_e2e_script "multi-workers" bash "${SCRIPT_DIR}/../multi-workers/run.sh" --skip-bootstrap
}

main "$@"
