#!/bin/bash

FEB()
{
  [ `expr $YR % 4` = 0 ] && FEB_DAYS=29 || FEB_DAYS=28

  if [ $YR -ge 1800 ]; then
     [ `expr $YR % 100` = 0 ] && FEB_DAYS=28
     [ `expr $YR % 400` = 0 ] && FEB_DAYS=29
  fi
}

HIGHLIGHT()
{
  [ $N -eq 26 -a $MNT -eq 01 -a $YR -ge 1950 ] || \
  [ $N -eq 08 -a $MNT -eq 03 ]                 || \
  [ $N -eq 25 -a $MNT -eq 03 ]                 || \
  [ $N -eq 26 -a $MNT -eq 03 ]                 || \
  [ $N -eq 09 -a $MNT -eq 04 ]                 || \
  [ $N -eq 14 -a $MNT -eq 04 ]                 || \
  [ $N -eq 18 -a $MNT -eq 04 ]                 || \
  [ $N -eq 22 -a $MNT -eq 04 ]                 || \
  [ $N -eq 01 -a $MNT -eq 05 ]                 || \
  [ $N -eq 23 -a $MNT -eq 05 ]                 || \
  [ $N -eq 15 -a $MNT -eq 08 -a $YR -ge 1947 ] || \
  [ $N -eq 20 -a $MNT -eq 08 ]                 || \
  [ $N -eq 07 -a $MNT -eq 09 ]                 || \
  [ $N -eq 02 -a $MNT -eq 10 ]                 || \
  [ $N -eq 12 -a $MNT -eq 10 ]                 || \
  [ $N -eq 01 -a $MNT -eq 11 ]                 || \
  [ $N -eq 03 -a $MNT -eq 11 ]                 || \
  [ $N -eq 15 -a $MNT -eq 11 ]                 || \
  [ $N -eq 25 -a $MNT -eq 12 ]                 && CLR="\033[41m"
}

ERROR()
{
  echo -e "\033[31mError!\033[0m Enter a valid month and year in numbers."
  exit
}

if   [ -z $1 ]; then
     MNT=`date +%m`
     [ $MNT -le 9 ] && MNT=${MNT#0}
     YR=`date +%Y`
elif [ -z $2 ]; then
     [ $1 -le 12 ] && MNT=$1 && YR=`date +%Y` || ERROR
elif [ -n $2 ]; then
     [ $1 -le 12 ] && MNT=$1 || ERROR
     YR=$2
fi

if   [ $MNT = 1 ]; then
     echo -e "\033[9G\033[33mJanuary $YR\033[0m"
     DAYS=31
elif [ $MNT = 2 ]; then
     echo -e "\033[8G\033[33mFebruary $YR\033[0m"
     FEB
     DAYS=$FEB_DAYS
elif [ $MNT = 3 ]; then
     echo -e "\033[10G\033[33mMarch $YR\033[0m"
     DAYS=31
elif [ $MNT = 4 ]; then
     echo -e "\033[10G\033[33mApril $YR\033[0m"
     DAYS=30
elif [ $MNT = 5 ]; then
     echo -e "\033[11G\033[33mMay $YR\033[0m"
     DAYS=31
elif [ $MNT = 6 ]; then
     echo -e "\033[10G\033[33mJune $YR\033[0m"
     DAYS=30
elif [ $MNT = 7 ]; then
     echo -e "\033[10G\033[33mJuly $YR\033[0m"
     DAYS=31
elif [ $MNT = 8 ]; then
     echo -e "\033[9G\033[33mAugust $YR\033[0m"
     DAYS=31
elif [ $MNT = 9 ]; then
     echo -e "\033[8G\033[33mSeptember $YR\033[0m"
     DAYS=30
elif [ $MNT = 10 ]; then
     echo -e "\033[9G\033[33mOctober $YR\033[0m"
     DAYS=31
elif [ $MNT = 11 ]; then
     echo -e "\033[8G\033[33mNovember $YR\033[0m"
     DAYS=30
elif [ $MNT = 12 ]; then
     echo -e "\033[8G\033[33mDecember $YR\033[0m"
     DAYS=31
fi

echo -e "\033[33m---------------------------\033[0m"
echo -e "\033[32mSun Mon Tue Wed Thu Fri Sat\033[0m"
echo -e "\033[33m---------------------------\033[0m"

FEB
[ $MNT -eq 1 ] && PRE_DAYS=0
[ $MNT -eq 2 ] && PRE_DAYS=31
[ $MNT -eq 3 ] && PRE_DAYS=$((31+$FEB_DAYS))
[ $MNT -eq 4 ] && PRE_DAYS=$((62+$FEB_DAYS))
[ $MNT -eq 5 ] && PRE_DAYS=$((92+$FEB_DAYS))
[ $MNT -eq 6 ] && PRE_DAYS=$((123+$FEB_DAYS))
[ $MNT -eq 7 ] && PRE_DAYS=$((153+$FEB_DAYS))
[ $MNT -eq 8 ] && PRE_DAYS=$((184+$FEB_DAYS))
[ $MNT -eq 9 ] && PRE_DAYS=$((215+$FEB_DAYS))
[ $MNT -eq 10 -a $YR -eq 1752 ] && PRE_DAYS=$((245+$FEB_DAYS-11))
[ $MNT -eq 10 -a ! $YR -eq 1752 ] && PRE_DAYS=$((245+$FEB_DAYS))
[ $MNT -eq 11 -a $YR -eq 1752 ] && PRE_DAYS=$((276+$FEB_DAYS-11))
[ $MNT -eq 11 -a ! $YR -eq 1752 ] && PRE_DAYS=$((276+$FEB_DAYS))
[ $MNT -eq 12 -a $YR -eq 1752 ] && PRE_DAYS=$((306+$FEB_DAYS-11))
[ $MNT -eq 12 -a ! $YR -eq 1752 ] && PRE_DAYS=$((306+$FEB_DAYS))
[ $YR -gt 1752 ] && PRE_DAYS=$(($PRE_DAYS-11))
[ $YR -gt 1800 ] && PRE_DAYS=$(($PRE_DAYS-1))
[ $YR -gt 1900 ] && PRE_DAYS=$(($PRE_DAYS-1))

PRE_YRS=$(($YR-1))
LEAP_DAYS=$(($PRE_YRS/4))
TOTAL_DAYS=$(($PRE_YRS*365+$LEAP_DAYS+$PRE_DAYS))
INT=`echo "scale=1; $TOTAL_DAYS / 7" | bc`
DEC=`echo $INT | awk -F. '{print $2}'`
[ $TOTAL_DAYS -eq 0 ] && DEC=0

[ $DEC -eq 1 ] && DAY=SUN && CLM=2
[ $DEC -eq 2 ] && DAY=MON && CLM=6
[ $DEC -eq 4 ] && DAY=TUE && CLM=10
[ $DEC -eq 5 ] && DAY=WED && CLM=14
[ $DEC -eq 7 ] && DAY=THU && CLM=18
[ $DEC -eq 8 ] && DAY=FRI && CLM=22
[ $DEC -eq 0 ] && DAY=SAT && CLM=26

N=1
while [ $N -le $DAYS ]
do
  [ $CLM -eq 2 ] && CLR="\033[31m"
  HIGHLIGHT
  [ $N -le 9 ] && N=" $N"
  echo -en "\033[${CLM}G${CLR}${N}\033[0m  "
  unset CLR
  N=$((N+1))
  CLM=$((CLM+4))
  if [ $N -eq 3 -a $MNT -eq 9 -a $YR -eq 1752 ]; then
     N=$((N+11))
  fi
  [ $CLM -gt 27 ] && echo -ne "\n" && CLM=2
done

echo -e "\n\033[33m---------------------------\033[0m"
if   [ $MNT = 1 -a $YR -ge 1950 ]; then
     echo "26 - Republic Day"
elif [ $MNT = 3 ]; then
     echo " 8 - Maha Shivratri"
     echo "25 - Good Friday"
     echo "26 - Holi"
elif [ $MNT = 4 ]; then
     echo " 9 - Gudi Padwa"
     echo "14 - Ambedkar Jayanti"
     echo "18 - Ram Navmi"
     echo "22 - Mahavir Jayanti"
elif [ $MNT = 5 ]; then
     echo " 1 - Maharashtra Day"
     echo "23 - Buddh Purnima"
elif [ $MNT = 8 ]; then
     [ $YR -ge 1947 ] && echo "15 - Independence Day"
     echo "20 - Parsi New Year"
elif [ $MNT = 9 -a ! $YR = 1752 ]; then
     echo "7 - Ganesh Chaturthi"
elif [ $MNT = 10 ]; then
     echo " 2 - Gandhi Jayanti"
     echo "12 - Dasera"
elif [ $MNT = 11 ]; then
     echo " 1 - Diwali"
     echo " 3 - Bhau Beej"
     echo "15 - Guru Nanak Jayanti"
elif [ $MNT = 12 ]; then
     echo "25 - Christmas Day"
fi
