#!/bin/bash
#########################################################
# simupl.sh – SIM-Metadaten an infosnow-API senden
#
# Läuft non-interaktiv (von parse.sh / 200.sh getriggert).
# Upload erfolgt nur wenn:
#   a) Token vorhanden (Player freigeschaltet)
#   b) ICCID geändert hat oder noch nie hochgeladen wurde
#########################################################

BIN=/home/snowtv/bin
LOG=/var/log/stv.log
ICCID_FILE="$BIN/sim_iccid"

_log() { echo "$(date '+%Y-%m-%d %H:%M:%S') simupl: $*" >> "$LOG"; }

# Kein Modem → lautlos beenden
MODEM_IDX=$(mmcli -L 2>/dev/null | grep -oP 'Modem/\K[0-9]+' | head -1)
[ -z "$MODEM_IDX" ] && exit 0

# Kein Token → noch nicht freigeschaltet
TOK="$(cat $BIN/token 2>/dev/null)"
[ -z "$TOK" ] && exit 0

# SIM-Index ermitteln
MODEM_INFO=$(mmcli -m "$MODEM_IDX" 2>/dev/null)
SIM_IDX=$(echo "$MODEM_INFO" | grep -oP 'primary sim path:.*SIM/\K[0-9]+')
[ -z "$SIM_IDX" ] && { _log "SIM-Index nicht ermittelbar"; exit 1; }

SIM_INFO=$(mmcli -i "$SIM_IDX" 2>/dev/null)
ICCID=$(echo "$SIM_INFO" | grep -oP 'iccid:\s+\K\S+')
[ -z "$ICCID" ] && { _log "ICCID nicht lesbar"; exit 1; }

# ICCID unverändert → kein Upload nötig
ICCID_STORED="$(cat "$ICCID_FILE" 2>/dev/null)"
[ "$ICCID" = "$ICCID_STORED" ] && exit 0

_log "SIM geändert oder Erstupload (ICCID: $ICCID_STORED → $ICCID)"

# Vollständige SIM-Daten lesen
IMEI=$(echo "$MODEM_INFO"     | grep -oP 'imei:\s+\K\S+')
SIGNAL=$(echo "$MODEM_INFO"   | grep -oP 'signal quality:\s+\K[0-9]+')
MANUF=$(echo "$MODEM_INFO"    | grep -oP 'manufacturer:\s+\K.+' | head -1 | xargs)
MODEL=$(echo "$MODEM_INFO"    | grep -oP 'model:\s+\K.+'        | head -1 | xargs)
IMSI=$(echo "$SIM_INFO"       | grep -oP 'imsi:\s+\K\S+')
MSISDN=$(echo "$SIM_INFO"     | grep -oP 'own numbers:\s+\K\S+' | head -1)
OPERATOR=$(echo "$SIM_INFO"   | grep -oP 'operator name:\s+\K.+' | head -1 | xargs)
APN=$(nmcli -g gsm.apn connection show lte-snowtv 2>/dev/null)

# Detaillierte Signalwerte (RSSI/RSRP/RSRQ/SNR)
SIG_DETAIL=$(mmcli -m "$MODEM_IDX" --signal-get 2>/dev/null)
RSSI=$(echo "$SIG_DETAIL" | grep -oP 'rssi:\s+\K[-0-9.]+')
RSRP=$(echo "$SIG_DETAIL" | grep -oP 'rsrp:\s+\K[-0-9.]+')
RSRQ=$(echo "$SIG_DETAIL" | grep -oP 'rsrq:\s+\K[-0-9.]+')
SNR=$(echo  "$SIG_DETAIL" | grep -oP 's/n:\s+\K[-0-9.]+')

ID="$($BIN/getid.sh)"
DOMAIN="$($BIN/getdomain.sh | tr -d "[']")"

JSON=$(jq -n \
    --arg imei     "$IMEI"     \
    --arg iccid    "$ICCID"    \
    --arg imsi     "$IMSI"     \
    --arg msisdn   "$MSISDN"   \
    --arg operator "$OPERATOR" \
    --arg apn      "$APN"      \
    --arg signal   "$SIGNAL"   \
    --arg modem    "$MANUF $MODEL" \
    --arg rssi     "$RSSI"     \
    --arg rsrp     "$RSRP"     \
    --arg rsrq     "$RSRQ"     \
    --arg snr      "$SNR"      \
    '{"simInfo":{"imei":$imei,"iccid":$iccid,"imsi":$imsi,"msisdn":$msisdn,"operator":$operator,"apn":$apn,"signal":$signal,"modem":$modem,"rssi":$rssi,"rsrp":$rsrp,"rsrq":$rsrq,"snr":$snr}}')

HTTP=$(curl -k --connect-timeout 20 --max-time 40 -s -w "%{http_code}" -o /dev/null \
    --data "$JSON" \
    -H "APG-Authorization: ${TOK}" \
    "${DOMAIN}/apg-mp?device=${ID}" \
    --user-agent "apg-mp")

if [ "$HTTP" = "200" ]; then
    echo "$ICCID" > "$ICCID_FILE"
    _log "Upload OK (HTTP $HTTP): $JSON"
else
    _log "Upload fehlgeschlagen (HTTP $HTTP) – wird beim nächsten Poll erneut versucht"
fi

exit 0
