#!/bin/bash

# DEBUG
#set -x

source helpers/server
source helpers/client
source helpers/virtual

trap : INT

_error() {
  echo
  echo "[ERROR] $1"
  exit 1
}

_return() {
  _res="$@"
}

echo "#******************************#"
echo "#   ANdroid EXternal Display   #"
echo "*******************************"
echo 

#******* CHECK REQUIREMENT ******#
## ADB?
ADB=${ADB:-$(command -v adb 2>&1)}
[ -n "${ADB}" ] || _error "adb binary not found in PATH and no ADB env variable defined" 

## ADB device found?
[ -n "$($ADB devices | tail -n+2)" ] || _error "adb couldn't find any conencted device"

## ADB authorized?
adb devices | grep -q "unauthorized" && _error "adb is not authorized to access the device"

#******* HANDLE PRAMETERS ******#
# TODO: command parameters
#echo $@

#******** SERVER DETAILS *******#

SERVER_DISPLAY=$(server_get_display)
SERVER_DPI=$(server_get_dpi)
SERVER_IP=$(server_get_ip)

#******** CLIENT DETAILS *******#

CLIENT_RESOLUTION=($(client_get_resolution))
CLIENT_DPI=$(client_get_dpi)
CLIENT_IP=$(client_get_ip)

#******** VIRTUAL ********#

VIRTUAL_SCALE=$(bc <<< "scale=2; ${SERVER_DPI} / ${CLIENT_DPI}" | awk '{printf "%f", $0}') # Add traling zero to bc output
VIRTUAL_RESOLUTION=(${CLIENT_RESOLUTION[*]})

echo "[>] Starting new external display..."
## Create new external virtual display and store its ID (details)
virtual_new_display ${VIRTUAL_RESOLUTION[0]} ${VIRTUAL_RESOLUTION[1]} ${VIRTUAL_SCALE} ${CLIENT_IP} || _error "Couldn't create new virtual display"
VIRTUAL_DISPLAY_ID=$_res
echo "${VIRTUAL_DISPLAY_ID}"

echo
# TODO: here show interactive menu to refresh external device, reposition them, go to backgroud, exit
PS3='Choose an option: '
options=("Reposition display" "Exit")
select opt in "${options[@]}"
do
    case $opt in
        "Reposition display")
            echo "Move the virtual display as wished and *be sure to save and close* Arandr."
            arandr
            virtual_move_display ${VIRTUAL_DISPLAY_ID}
            ;;
        "Exit")
            break
            ;;
        *) echo "invalid option $REPLY";;
    esac
done

## Delete external virtual display
virtual_remove_display ${VIRTUAL_DISPLAY_ID}
