#!/bin/bash

#./report.sh > /dev/null > 2>&1 & err to null and both error and std out into 1 thing and run in background

#235.20.20.2 1026

while true;do
read IP PORT < input.txt

echo "IP: $IP"
echo "PORT: $PORT"

/usr/bin/timeout 3 /usr/local/bin/Ridsys-RStreamer_Engine-1.6 -I ip $IP:$PORT -P until --seconds 1 -P analyze -o inputstatus.txt -O drop

filename="inputstatus.txt"
output_file="output.txt"



service_id=$(grep -A 20 'Srv Id' "$filename" | awk '/Srv Id/ {found=1; next} found && NF {gsub(/[^a-zA-Z0-9]/, "", $2);if ($2 != "Note") print $2; count++} $2 == "Note" ||  found && !NF {exit}')

service_name=$(grep -A 20 'Service Name' "$filename" | awk '/Service Name/ {found=1; next} found && NF {gsub(/[^a-zA-Z0-9]/, "", $3); if ($4 != "CClear") {if (substr($4, 1, 1) == "(" || substr($4, 1, 1) == ".") {print $3} else {if (substr($5, 1, 1) == "(" || substr($5, 1, 1) == "." || $5 == "C") {print $3, $4} else {sub(/\(.*/, "", $5); sub(/\..*/, "", $5); print $3, $4, $5}}}} $4 == "CClear" || (!NF && found) {exit}')






service_provider=$(grep 'provider:' "$filename" | awk -F 'provider:' '{if (NF > 1) print $2,$3; else print "NULL"}' | awk '{gsub(/[^a-zA-Z0-9-]/, "", $1); gsub(/[^a-zA-Z0-9-]/, "", $2); print $1,$2}')

resolution=$(grep -A 10 -E 'Service name:' "$filename" | awk '/Service name:/ {block=1} block==1 {for (i=1; i<=NF; i++) { if ($i ~ /video|Video/) { if ($(i+1) !~ /\./) print $(i+1); else print "NULL"; block=0; } } }' | awk '{gsub(/[^0-9NULLa-x]/,""); print}')
resolution1=$(if [ "$resolution" == "NULL" ]; then
  grep -A 10 -E 'Service name:' "$filename" | awk '
    /Service name:/ {
      block=1
    }
    block==1 {
      for (i=1; i<=NF; i++) {
        if ($i ~ /\(+[0-9]+x[0-9]+/) {
          print $i
          block=0
          found=1
          break
        }
      }
    }' | awk '{gsub(/[^0-9a-xA-Z]/,""); print}'
else
  echo "$resolution"
fi)

if [ -z "$resolution1" ]; then
  resolution1="NULL" #change null to NULL if i am forgot to change.iam used here to see it works or not.
fi

video_codec=$(grep -A 10 -E 'Service name:' "$filename" | awk '/Service name:/ {count=0} /Video|video/ {for (i=1; i<=NF; i++) {if ($i ~ /video|Video/) print $(i-1),$i}} {count++ && count<=10}')


audio_codec=$(grep -A 12 'Service name:' "$filename" | \
  awk '
  /Service name:/ {
      if (codec_list != "") {
          print codec_list
      }
      codec_list = ""
      next
  }
  {
      for (i = 1; i <= NF; i++) {
          if ($i == "MPEG-2" && $(i+1) == "AAC" && $(i+2) == "Audio") {
              codec_list = codec_list == "" ? $i " " $(i+1) " " $(i+2) : codec_list ", " $i " " $(i+1) " " $(i+2)
              i += 2
          } else if ($i == "AAC" && $(i+1) == "Audio") {
              continue
          } else if ($i ~ /MPEG-[123]/ && $(i+1) == "Audio") {
              codec_list = codec_list == "" ? $i " " $(i+1) : codec_list ", " $i " " $(i+1)
          } else if ($i == "AC-3" && $(i+1) == "Audio") {
              codec_list = codec_list == "" ? $i " " $(i+1) : codec_list ", " $i " " $(i+1)
          }
      }
  }
  END {
      if (codec_list != "") {
          print codec_list
      } else {
          print "NULL"
      }
  }'
)


bitrate=$(grep -A 20 'Bitrate' "$filename" | awk '/Bitrate/ {found=1; next} found && NF { if ($(NF-2) ~ /^[[:alnum:]\/,]+$/ && $(NF-1) ~ /^[[:alnum:]\/,]+$/) print $(NF-2), $(NF-1); count++ } found && (!NF || ($(NF-2) !~ /^[[:alnum:]\/,]+$/ || $(NF-1) !~ /^[[:alnum:]\/,]+$/)) { exit }')



num_entries=$(echo "$service_id" | wc -l)


for i in $(seq 1 $num_entries); do
id=$(echo "$service_id" | sed -n "${i}p")
name=$(echo "$service_name" | sed -n "${i}p")
provider=$(echo "$service_provider" | sed -n "${i}p")
res=$(echo "$resolution1" | sed -n "${i}p")
vcodec=$(echo "$video_codec" | sed -n "${i}p")
acodec=$(echo "$audio_codec" | sed -n "${i}p")
brate=$(echo "$bitrate" | sed -n "${i}p")


echo ""Udp: $IP:$PORT" | "Service ID: $id" | "Service Name: $name" | "Service Provider: $provider" | "Resolution: $res" | "Video Codec: $vcodec" | "Audio Codec: $acodec" | "Bitrate: $brate""
echo "" 
echo ""
done > "$output_file"

sleep 1 
done

