#!/bin/bash
#
#
# Define internal and external display port
INT="LVDS1"
EXT="VGA1"

usage() {
  echo "Usage $0 [-v] [-h]
-v: verbose mode
-h: this text"
}

while getopts "hv" opt; do
  case $opt in
    h) usage; exit;;
    v) verbose=1;;
    \?) usage; exit 1;;
  esac
done

# Rewriting echo to implement verbose mode
echo() { ((verbose)) && command echo "$@" || return 0; }


# some functions
function get_res(){
    res=$(xrandr --query | grep "$1 connected" -A1 | grep -o -E ^\ +[0-9]+x[0-9]+ | grep -o -E [0-9]+x[0-9]+)
    xres=${res%x*}
    yres=${res#*x}
    echo "$1 has $xres x $yres."
}

function scale(){
    echo "Calculating scale factor ..."
    get_res $INT
    yres_int=$yres
    xres_int=$xres
    get_res $EXT
    yres_ext=$yres
    xres_ext=$xres
    xscale=$(/bin/echo "scale=10; $xres_ext/$xres_int" | bc -l)
    yscale=$(/bin/echo "scale=10; $yres_ext/$yres_int" | bc -l)
    scale_factor=${xscale}x${yscale}
    echo "Scaling factor: $scale_factor"
}

function get_display_name() {
    display_name=$(xfconf-query -c displays -p /Default/$1)
}

# main
if xrandr --query | grep -q "$EXT connected ("; then
    echo "Current status: $EXT is connected but off. Switching on ..."
    scale
    get_display_name $EXT
    notify-send --icon=display 'Externes Anzeigegerät eingeschaltet' "$display_name"
    xrandr --output $EXT --auto --output $INT --auto --scale $scale_factor
elif xrandr --query | grep -q -E "$EXT connected [0-9]+x"; then
    echo "Current status: $EXT is connected and on. Switching off ..."
    get_display_name $EXT
    notify-send --icon=display 'Externes Anzeigegerät ausgeschaltet' "$display_name"
    xrandr --output $EXT --off --output $INT --auto --scale 1x1
else
    echo "Curent status: no external device connected. Switching to normal view."
    notify-send --icon=display 'Lokales Anzeigegerät zurückgesetzt'
    xrandr --output $INT --auto --scale 1x1
fi
