#!/bin/sh

# Semplice shellscript che permette di stampare un file in una stampante del Dipartimento di Matematica
# da una qualsiasi shell Unix (Linux, MacOS, BSD...). Funziona anche da remoto!
#
# È consigliato aggiungere la propria chiave ssh nella
# macchina `login` (aula3/4)
# tramite il comando `ssh-copy-id`, in modo da non dover
# inserire la password ogni volta.

_HOME="/home/unipi"
_SERVER="login"
_NO_CLI=true

main() {
    for f in "$@"; do
        scp "$f" "${_USER}@${_SERVER}.dm.unipi.it:${_HOME}/${_USER}/printa4-$(basename "$f")"
        if $_NO_CLI; then
            ssh -XY ${_USER}@${_SERVER}.dm.unipi.it "okular \"${_HOME}/${_USER}/printa4-$(basename "$f")\" --print"
        else
            ssh ${_USER}@${_SERVER}.dm.unipi.it "lp $OPTIONS \"${_HOME}/${_USER}/printa4-$(basename "$f")\""
        fi
        ssh ${_USER}@${_SERVER}.dm.unipi.it "rm \"${_HOME}/${_USER}/printa4-$(basename "$f")\""
    done
}

usage() {
    cat <<EOF
Script che consente di stampare in Aula 4

Utilizzo: $(basename $0) [OPTIONS] <DOCUMENTO> <...>

Opzioni disponibili:
  -h, --help                  mostra questo messaggio di aiuto
  -u, --user USER             specifica l'username di ateneo (default: $_USER)
  -s, --server SERVER         specifica il server (default: $_SERVER)
  -d, --home HOME             specifica la directory home (default: $_HOME)
  -c, --cli OPTIONS           stampa tramite "lp" invece che da interfaccia grafica tramite "okular",
                              passando gli opzioni di stampa per "lp" fra virgolette

Ad esempio:

  $(basename "$0") -u n.cognome ~/GAAL.pdf

  $(basename "$0") -u n.cognome alg2.pdf commRingTheory.pdf

  $(basename "$0") -u n.cognome --cli '-o sides=two-sided-short-edge' MR-impaginato.pdf

N.B.: L'opzione --cli usa le opzioni necessarie per poter stampare un file
creato con lo script "impagina", per rilegare le dispense a libretto in A5.
Altre opzioni utili da passare ad "lp":
  -d destination               stampante da usare ("lpstat -d -p" mostra le stampanti disponibili)
  -n num-copies                numero di copie da stampare
  -P page-list                 per specificare le pagine da stampare, ad esempio "1,4-7,15"
  -o media=SIZE                dove SIZE può essere ad esempio "a4", "letter" o "legal"
  -o number-up=NUM             per stampare NUM pagine per foglio
  -o orientation-requested=5   per stampare in orizzontale (landscape)
  -o sides=two-sided-long-edge per stampare in fronte-retro ("-o sides=two-sided-short-edge" per landscape)
EOF
}

error() {
    printf "$@\n" 1>&2
    usage
}

## PARSE OPTIONS
while [ "$#" -gt 0 ]; do
    case $1 in
        -h|--help) usage; exit 0;;
        -u|--user) _USER="$2"; shift;;
        -s|--server) _SERVER="$2"; shift;;
        -d|--home) _HOME="$2"; shift;;
        -c|--cli) _NO_CLI=false; OPTIONS="$2"; shift;;
        -*) error "Opzione invalida: $1" ;;
        *) break ;;
    esac
    shift
done

if [ -z "$1" ]; then
    error "Non hai specificato nessun file...\n"
else
    main "$@"
fi
