#!/bin/bash
#
# Author   : Gaston Gonzalez
# Date     : 6 October 2024
# Updated  : 11 October 2024
# Purpose  : Utility script for dumping system information

function usage() {
  echo "Usage: $(basename $0) <command>"
  echo "  active-radio - Display model of active radio" 
  echo "  et-cat       - Is CAT control connected"
  echo "  et-gps       - Is the GPS connected"
  echo "  ip           - System IP address"
  echo "  release      - EmComm Tools Release"
}

if [ $# -ne 1 ]; then
  usage
  exit 1
fi

case $1 in
  active-radio)
    if [ -L  "${ET_HOME}/conf/radios.d/active-radio.json" ]; then
      cat "${ET_HOME}/conf/radios.d/active-radio.json" | jq -r .model
    else
      echo "No radio selected"
    fi 
    ;;
  et-cat)

    if [ ! -L "${ET_HOME}/conf/radios.d/active-radio.json" ]; then
      echo "N/A"
      exit 0
    fi

    # 1. Check if the symlink was created by the udev rules
    if [ -e /dev/et-cat ]; then 

      # 2. Check if the rigctl systemd unit is running properly
      systemctl status rigctld --no-pager > /dev/null 
      if [ $? -eq 0 ]; then
     
        # 3. Grab and format frequency 
        FREQ=$(timeout 1 rigctl -m 2 f)
        if [ $? -eq 0 ]; then
          printf "%'d MHz\n" "$FREQ" | sed 's|,|.|g'
        else
          echo "Connected. Can't access VFO"; 
        fi
      else
        echo "Connected. rigctld not running"
      fi
    else
      echo "Not connected"; 
    fi

    ;; 
  et-gps)

    # 1. Check if the symlink was created by the udev rules
    if [ -e /dev/et-gps ]; then 

      # 2. Check if the gpsd systemd unit is running properly
      systemctl status gpsd --no-pager > /dev/null 
      if [ $? -eq 0 ]; then

        # 3. Obtain the current GPS mode
        GPS_MODE=$(gpspipe -w -n 10 | grep -m 1 TPV | jq --exit-status -r .mode)
        if [ $? -eq 0 ]; then

          case $GPS_MODE in
            1)
              echo "No fix"
            ;;
            2)
              echo "2D fix"
            ;;
            3)
              echo "3D fix"
            ;;
            *)
              echo "Unknown mode"
            ;;
          esac 

        else
          echo "Connected. Can't decode"
        fi

      else
        echo "Connected. gpsd not running"
      fi
    else 
      echo "Not connected" 
    fi

    ;; 
  ip)
    hostname -I
    ;;
  release)
    grep DISTRIB_DESCRIPTION /etc/lsb-release | sed 's|"||g' | awk '{print $1}' | cut -d"=" -f2
    ;;  
  *)
    echo "Command not supported."
    usage
    exit 1
    ;;
esac
