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

root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
source_dir=""
replace="no"

usage() {
    cat <<'EOF' >&2
Usage: ./tools/promote-readme-media --from ARTIFACT_DIRECTORY --replace

Copies approved WiFiManager README media from a successful ESP32 capture. The
source directory is the run directory containing readme-media/manifest.json.
EOF
    exit 2
}

while [[ $# -gt 0 ]]; do
    case "$1" in
        --from) [[ $# -ge 2 ]] || usage; source_dir="$2"; shift 2 ;;
        --replace) replace="yes"; shift ;;
        *) usage ;;
    esac
done

[[ -n "$source_dir" && "$replace" == "yes" ]] || usage
source_dir="$(cd "$source_dir" && pwd)"
media_dir="$source_dir/readme-media"
manifest="$media_dir/manifest.json"

[[ -r "$manifest" ]] || { echo "Missing README media manifest: $manifest" >&2; exit 1; }
grep -Fq '"project":"WiFiManager"' "$manifest" &&
    grep -Fq '"kind":"readme-media"' "$manifest" &&
    grep -Fq '"status":"passed"' "$manifest" &&
    grep -Fq '"platform":"esp32"' "$manifest" || {
        echo "The media manifest is not a successful WiFiManager ESP32 capture." >&2
        exit 1
    }

target_dir="$root/docs/assets/readme"
validate_asset() {
    local source_file="$1" expected_type="$2" max_bytes="$3"
    [[ -s "$source_file" ]] || { echo "Missing media asset: $source_file" >&2; exit 1; }
    [[ "$(file --brief --mime-type "$source_file")" == "$expected_type" ]] || {
        echo "Unexpected media type for $source_file" >&2
        exit 1
    }
    (( $(wc -c < "$source_file") <= max_bytes )) || {
        echo "README media exceeds its size limit: $source_file" >&2
        exit 1
    }
}

# Verify the complete candidate before changing any tracked README asset.
validate_asset "$media_dir/portal-tour.gif" image/gif $((2 * 1024 * 1024))
validate_asset "$media_dir/portal-overview.png" image/png $((1024 * 1024))
validate_asset "$media_dir/portal-wifi-settings.png" image/png $((1024 * 1024))

install -d "$target_dir"
for asset in portal-tour.gif portal-overview.png portal-wifi-settings.png; do
    source_file="$media_dir/$asset"
    cp -- "$source_file" "$target_dir/$asset"
    printf 'Promoted %s\n' "docs/assets/readme/$asset"
done
