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

mt -f "${DEVICE}" load
deadline=$(($(date +%s) + 60))
while true; do
    now=$(date +%s)
    if ((now >= deadline)); then
        break
    fi
    remaining=$((deadline - now))
    # --barcode exits nonzero when the field is unreadable; an empty line is an unassigned barcode.
    if barcode=$(timeout "${remaining}s" ./yatm-lto-info -f "${DEVICE}" --barcode); then
        printf '{"barcode":"%s"}\n' "${barcode}" > "${OUT}"
        exit 0
    fi
    now=$(date +%s)
    if ((now >= deadline)); then
        break
    fi
    delay=$((deadline - now))
    if ((delay > 2)); then
        delay=2
    fi
    sleep "${delay}"
done
echo "Tape barcode is unavailable: ${DEVICE}" >&2
exit 1
