#!/bin/bash
#########################################################
# simcfg.sh – LTE/4G Modem konfigurieren
#
# - Erkennt Modem via ModemManager (mmcli)
# - Zeigt SIM-Infos (IMEI, IMSI, MSISDN, Operator)
# - Carrier / APN auswählen (Sunrise, Swisscom, manuell)
# - PIN setzen (optional)
# - NetworkManager GSM-Profil anlegen
# - SIM-Metadaten an infosnow-API senden
#########################################################

BIN=/home/snowtv/bin
LOG=/var/log/stv.log
CON_NAME="lte-snowtv"

_log() { echo "$(date '+%Y-%m-%d %H:%M:%S') simcfg: $*" | tee -a "$LOG"; }

# Modem suchen
MODEM_IDX=$(mmcli -L 2>/dev/null | grep -oP 'Modem/\K[0-9]+' | head -1)
if [ -z "$MODEM_IDX" ]; then
    echo "Kein Modem gefunden. ModemManager läuft? (systemctl status ModemManager)"
    exit 1
fi
_log "Modem gefunden: Index $MODEM_IDX"

MODEM_INFO=$(mmcli -m "$MODEM_IDX" 2>/dev/null)

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)
SIM_PATH=$(echo "$MODEM_INFO" | grep -oP 'primary sim path:\s+\K\S+')
SIM_IDX=$(echo "$SIM_PATH"    | grep -oP 'SIM/\K[0-9]+')

SIM_INFO=$(mmcli -i "$SIM_IDX" 2>/dev/null)
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)

printf "\n--- SIM-Informationen ---\n"
printf "Modem:    %s %s\n" "$MANUF" "$MODEL"
printf "IMEI:     %s\n"    "$IMEI"
printf "IMSI:     %s\n"    "$IMSI"
printf "MSISDN:   %s\n"    "$MSISDN"
printf "Operator: %s\n"    "$OPERATOR"
printf "Signal:   %s%%\n"  "$SIGNAL"
printf "\n"

# Carrier / APN auswählen
printf "Bitte Carrier auswählen:\n"
select CARRIER in "Sunrise" "Swisscom" "Manuell" "Überspringen"; do
    case $CARRIER in
        Sunrise)      APN="internet";          break ;;
        Swisscom)     APN="gprs.swisscom.ch";  break ;;
        Manuell)
            read -r -p "APN eingeben: " APN
            break ;;
        Überspringen) APN=""; break ;;
        *) echo "Ungültige Auswahl" ;;
    esac
done

# PIN (optional)
read -r -p "SIM-PIN (leer lassen wenn keine): " SIM_PIN

# NetworkManager GSM-Profil anlegen
if [ -n "$APN" ]; then
    sudo nmcli connection delete "$CON_NAME" 2>/dev/null
    if [ -n "$SIM_PIN" ]; then
        sudo nmcli connection add type gsm ifname "*" con-name "$CON_NAME" \
            gsm.apn "$APN" gsm.pin "$SIM_PIN" connection.autoconnect yes
    else
        sudo nmcli connection add type gsm ifname "*" con-name "$CON_NAME" \
            gsm.apn "$APN" connection.autoconnect yes
    fi
    _log "GSM-Profil '$CON_NAME' angelegt: APN=$APN"
    sudo nmcli connection up "$CON_NAME" 2>/dev/null \
        && _log "LTE-Verbindung aktiv" \
        || _log "LTE-Verbindung start ausstehend (normal bei erstem Anlegen)"
fi

# Detailliertes Signal-Reporting aktivieren (RSSI/RSRP/RSRQ/SNR via --signal-get)
sudo mmcli -m "$MODEM_IDX" --signal-setup=30 2>/dev/null \
    && _log "Signal-Reporting aktiviert (30s Refresh)" \
    || _log "Signal-Reporting konnte nicht aktiviert werden"

# SIM-Info wird automatisch hochgeladen sobald Token vorhanden (via simupl.sh)
# → getriggert von parse.sh (tokenID) und 200.sh (cfgCore, für SIM-Swap-Erkennung)
_log "GSM-Profil konfiguriert. SIM-Info-Upload erfolgt automatisch nach Serverfreischaltung."

exit 0
