#!/bin/bash
# Skrypt addagenda umożliwiający użytkownikowi wprowadzanie terminów dla skryptu agenda.

agendafile="$HOME/.agenda"

isDayName()
{
  # return = 0 if all is well, 1 on error

  case $(echo $1 | tr '[[:upper:]]' '[[:lower:]]') in
   nie*|pon*|wto*|sro*|czw*|pia*|sob*) retval=0 ;;
   * ) retval=1 ;;
  esac
  return $retval
}

isMonthName()
{
    case $(echo $1 | tr '[[:upper:]]' '[[:lower:]]') in
      sty*|lut*|mar*|kwi*|maj*|cze*)    return 0        ;;
      lip*|sie*|wrz*|paz*|lis*|gru*)    return 0        ;;
      * ) return 1      ;;
    esac
}

normalize()
{
  # Funkcja zamieniająca wszystkie znaki w ciągu na małe litery.
  echo  $1 | cut -c1-3| tr '[[:upper:]]' '[[:lower:]]'
}

if [ ! -w $HOME ] ; then
  echo "$0: Nie można zapisać pliku w katalogu domowym ($HOME)." >&2
  exit 1
fi

echo "Agenda: terminarz w systemie Unix"
/bin/echo -n "Data wydarzenia (dzień, miesiąc, dzień miesiąc rok lub dzień tygodnia): "
read word1 word2 word3 junk

if isDayName $word1 ; then
  if [ ! -z "$word2" ] ; then
    echo "Błędny format danych. Podaj tylko dzień tygodnia." >&2
    exit 1
  fi
  date="$(normalize $word1)"

else

  if [ -z "$word2" ] ; then
    echo "Błędny format danych. Niewłaściwa nazwa dnia tygodnia." >&2
    exit 1
  fi

  if [ ! -z "$(echo $word1|sed 's/[[:digit:]]//g')" ]  ; then
    echo "Błędny format danych. Podaj najpierw numer dnia." >&2
    exit 1
  fi

  if [ "$word1" -lt 1 -o "$word1" -gt 31 ] ; then
    echo "Błędny format danych. Numer dnia musi zawierać się w zakresie 1-31." >&2
    exit 1
  fi

  if ! isMonthName "$word2" ; then
    echo "Błędny format danych. Niewłaściwa nazwa miesiąca." >&2
    exit 1
  fi

  word2="$(normalize $word2)"

  if [ -z "$word3" ] ; then
    date="$word1$word2"
  else
    if [ ! -z "$(echo $word3|sed 's/[[:digit:]]//g')" ] ; then
      echo "Błędny format danych. Trzeci argument musi określać rok." >&2
      exit 1
    elif [ $word3 -lt 2000 -o $word3 -gt 2500 ] ; then
      echo "Błędny format danych. Rok musi zawierać się w zakresie 2000-2500" >&2
      exit 1
    fi
    date="$word1$word2$word3"
  fi
fi

/bin/echo -n "Jednowierszowy opis: "
read description

# Dane gotowe do zapisania w pliku.
echo "$(echo $date|sed 's/ //g')|$description" >> $agendafile

exit 0