#!/usr/bin/env bash
# BASH fuzzyclock
# by Corey Mwamba
#
export TEXTDOMAINDIR="/usr/share/locale"
export TEXTDOMAIN=bash-fuzzy-clock
hr=($(date '+%_H'))
min=10#$(date '+%M')
nearly=$"nearly"
justaft=$"just after"
oclock=($"o'clock")
lng=${LANGUAGE:0:2}
if [[ $((min % 5)) -gt 0 ]];then
if [[ $((min % 5)) -lt 3 ]]; then 
adv=$justaft
else
adv=$nearly
fi
fi
case "$1" in
meri|m)
if [[ $hr -gt 0 && $hr -lt 12 ]]; then
echo $"morning"
elif [[ $hr -ge 12 && $hr -lt 18 ]]; then
echo $"afternoon"
elif [[ $hr -ge 18 && $hr -lt 21 ]]; then
echo $"evening"
else
echo $"night"
fi
;;
*)
if [[ $min -gt 27 && $min -lt 33 ]]; then
adj=$"half past"
case "$lng" in
de)
hr=$((hr + 1))
if [[ $hr -eq 24 ]]; then
hr=0
fi
esac
fi
if [[ $min -ge 33 ]]; then
hr=$((hr + 1))

if [[ $hr -eq 24 ]]; then
hr=0
fi
fi

case $hr in
1|13)
th=$"one"
;;
2|14)
th=$"two"
;;
3|15)
th=$"three"
;;
4|16)
th=$"four"
;;
5|17)
th=$"five"
;;
6|18)
th=$"six"
;;
7|19)
th=$"seven"
;;
8|20)
th=$"eight"
;;
9|21)
th=$"nine"
;;
10|22)
th=$"ten"
;;
11|23)
th=$"eleven"
;;
0)
th=$"midnight"
;;
12)
th=$"midday"
esac
# French and Spanish use an hour declaration all the time
# Italian does not
# Most other languages treat one as a singular hour 
#
# But this might change if other languages are added.
# I need to be able to control this better...

case "$lng" in
fr|es)
if [[ $hr -eq 1 || $hr -eq 13 ]]; then
manner=$"hour"
else
manner=$oclock
fi
;;
*)
if [[ $hr -ne 12 && $hr -ne 0  ]]; then
if [[ $min -gt 57 || $min -lt 3 ]]; then
manner=$oclock
fi
fi
esac

if [[ $min -ge 3 && $min -le 7 ]]; then
adj=$"five past"
fi

if [[ $min -gt 7 && $min -lt 13 ]]; then
adj=$"ten past"
fi

if [[ $min -ge 13 && $min -le 17 ]]; then
adj=$"quarter past"
fi

if [[ $min -gt 17 && $min -lt 23 ]]; then
adj=$"twenty past"
fi

if [[ $min -ge 23 && $min -le 27 ]]; then
adj=$"twenty-five past"
fi

if [[ $min -ge 33 && $min -le 37 ]]; then
adj=$"twenty-five to"
fi

if [[ $min -gt 37 && $min -lt 43 ]]; then
adj=$"twenty to"
fi

if [[ $min -ge 43 && $min -le 47 ]]; then
adj=$"quarter to"
fi

if [[ $min -gt 47 && $min -lt 53 ]]; then
adj=$"ten to"
fi

if [[ $min -ge 53 && $min -le 57 ]]; then
adj=$"five to"
fi

if [[ -z "$adv" && -z "$adj" ]]; then
printf $"$th $manner\n"
fi
if [[ -z "$adv" && -n "$adj" ]]; then
printf $"$adj $th $manner\n"
fi
if [[ -n "$adv" && -z "$adj" ]]; then
printf $"$adv $th $manner\n"
fi
if [[ -n "$adv" && -n "$adj" ]]; then
printf $"$adv $adj $th $manner\n"
fi
esac