#!/bin/bash

set -e
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"

while getopts e:t:u:d:v:p:a:i: flag; do
   case ${flag} in
      e) EMAIL=${OPTARG} ;;
      t) TAG=${OPTARG} ;;
      u) USERID=${OPTARG} ;;
      d) DESCRIPTION=${OPTARG} ;;
      v) VERSION=${OPTARG} ;;
      p) USER_PATH=${OPTARG} ;;
      a) ADDITIONAL=${OPTARG} ;;
      i) UNIX_USER_ID=${OPTARG} ;;
   esac
done

tmp_dir=$(mktemp -d -t surfshark-diagnostics-XXXXXXX)

set +e

echo "additional: $ADDITIONAL $USER_PATH" > $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt

# user settings
cat $USER_PATH/settings* >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
cat $USER_PATH/globals* >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
echo "App version: $VERSION" >> $tmp_dir/info.txt

cat /etc/os-release >> $tmp_dir/info.txt
echo $'\n' >> $tmp_dir/info.txt

# network manager devices
echo "/proc/version $(cat /proc/version)" >> $tmp_dir/info.txt
echo "XDG_CURRENT_DESKTOP $XDG_CURRENT_DESKTOP" >> $tmp_dir/info.txt
echo "DE $DE" >> $tmp_dir/info.txt
echo "DESKTOP_SESSION $DESKTOP_SESSION" >> $tmp_dir/info.txt
echo "GROUPS $(getent group)" >> $tmp_dir/info.txt
nmcli --version >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
gjs --version >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
wg --version >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
pkaction --version >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
gnome-keyring version >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
nmcli connection show >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
ifconfig >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
resolvectl status >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
route >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
su $UNIX_USER_ID -c 'nmcli general permissions' >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt


# polkit
mkdir -p $tmp_dir/etc && cp -R /etc/polkit-1 $_

mkdir -p $tmp_dir/etc/polkit-1 && cp -R /etc/polkit-1/rules.d /etc/polkit-1/actions/org.freedesktop.NetworkManager.policy $_
mkdir -p $tmp_dir/usr/share/polkit-1 && cp -R /usr/share/polkit-1/rules.d /usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy $_

mkdir -p $tmp_dir/etc && cp -R /etc/polkit-1 $_
mkdir -p $tmp_dir/var/lib && cp -R /var/lib/polkit-1 $_

mkdir -p $tmp_dir/etc/dbus-1/system.d && cp -R /etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf $_
mkdir -p $tmp_dir/etc/NetworkManager && cp -R /etc/NetworkManager/conf.d /etc/NetworkManager/NetworkManager.conf $_
mkdir -p $tmp_dir/usr/lib/NetworkManager && cp -R /usr/lib/NetworkManager/conf.d $_

mkdir -p $tmp_dir/etc && cp -R /etc/netplan $_

# ip routes
ip route show >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
ip -6 route show >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
ip rule show >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt
ip -6 rule show >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt

# ip tables
iptables --version >> $tmp_dir/info.txt 2> /dev/null
iptables -S >> $tmp_dir/info.txt 2> /dev/null
echo $'\n' >> $tmp_dir/info.txt

# network manager logs
journalctl -u NetworkManager 2> /dev/null | tail -500 > $tmp_dir/nm.log
# crash report
cp -R $USER_PATH/Crashpad $tmp_dir/ 2> /dev/null
# surfsharkd logs
cp $USER_PATH/surfsharkd-user.log $tmp_dir/ 2> /dev/null
tail -500 /var/log/surfsharkd.log > $tmp_dir/surfsharkd-init1.log 2> /dev/null
tail -500 /var/log/surfsharkd2.log > $tmp_dir/surfsharkd-init2.log 2> /dev/null

journalctl -u surfsharkd2.service | tail -1000 > $tmp_dir/surfsharkd2.log 2> /dev/null

# electron logs
cp -R $USER_PATH/logs $tmp_dir 2> /dev/null
# apt logs
cat /var/log/apt/term.log 2> /dev/null | tail -400 > $tmp_dir/apt.log
cat /var/log/dpkg.log 2> /dev/null | tail -100 > $tmp_dir/dpkg.log

set -e

zip -r $tmp_dir/../surfshark-diagnostics.zip $tmp_dir 2> /dev/null

params=()

if [[ -n $USERID ]]; then
    params+=("-F userId=\"$USERID\"")
fi

if [[ -n $EMAIL  ]]; then
    params+=("-F email=\"$EMAIL\" ")
fi

if [[ -n $TAG  ]]; then
    params+=("-F tag=\"$TAG\"")
fi

if [[ -n $DESCRIPTION  ]]; then
    params+=("-F description=\"$DESCRIPTION\"")
fi

curl 'https://api.surfshark.com/v1/proposal/diagnostics' \
    "${params[@]}" \
    --user-agent "SurfsharkLinux/$VERSION device/desktop" \
    --fail -F "file=@$tmp_dir/../surfshark-diagnostics.zip"

RETUR=$?

rm $tmp_dir/../surfshark-diagnostics.zip
rm -rf $tmp_dir

exit $RETUR
