#!/usr/bin/env bash
# paymail — Hardened payment status checker
set -euo pipefail
shopt -s inherit_errexit 2>/dev/null || true

SDIR="$(cd "$(dirname "$0")" && pwd)"
source "${SDIR}/se_client.sh"

# ── Input validation ───────────────────────────────────────────────────────
if [[ $# -lt 2 ]]; then
    printf 'Usage: %s txid method\n' "$0" >&2
    printf '  method: xmr | tron | stripe\n' >&2
    exit 1
fi

readonly TXID="${1:-}"
readonly METHOD="${2:-}"

# Validate TXID (alphanumeric only)
if [[ ! "${TXID}" =~ ^[a-zA-Z0-9_-]+$ ]] || [[ "${#TXID}" -gt 256 ]]; then
    se_log "err" "paymail: invalid txid"
    exit 1
fi

# Validate method
readonly VALID_METHODS="xmr tron stripe"
if [[ ! " ${VALID_METHODS} " =~ " ${METHOD} " ]]; then
    se_log "err" "paymail: invalid method: ${METHOD}"
    exit 1
fi

# ── Query engine ───────────────────────────────────────────────────────────
BODY="$(jq -n --arg t "${TXID}" --arg m "${METHOD}" '{"txid":$t,"method":$m}')"
RESP="$(se_curl_post "/a/payment/status" "${BODY}" 2>/dev/null || printf '%s' '')"

if [[ -z "${RESP}" ]]; then
    se_log "err" "payment_check: ${METHOD} ${TXID} failed"
    printf '%s\n' "ERROR" >&2
    exit 1
fi

# ── Parse response ─────────────────────────────────────────────────────────
case "${METHOD}" in
    xmr)
        CONF="$(printf '%s' "${RESP}" | jq -r '.confirmations // empty' 2>/dev/null || printf '%s' '0')"
        printf 'confirmations=%s\n' "${CONF:-0}"
        ;;
    tron)
        printf '%s\n' "${RESP}"
        ;;
    stripe)
        STATUS="$(printf '%s' "${RESP}" | jq -r '.status // "unknown"' 2>/dev/null || printf '%s' 'unknown')"
        printf 'status=%s\n' "${STATUS}"
        ;;
    *)
        printf '%s\n' "${RESP}"
        ;;
esac

se_log "info" "payment_check: ${METHOD} ${TXID} queried"
