#!/bin/bash

# 1 = message
error(){
  echo -e "${color_error}ERROR: $1${color_reset}" 1>&2
  mkdir -p $tkis_output 

  if [ -d $WO ] ; then
    if [[ $tkis_process != "" ]] ; then
      echo -e "${color_error}ERROR: $1${color_reset}" >> ${tkis_output}error.$tkis_process
    fi
  fi

  exit 1
}

# 1 = message
warning(){
  echo -e "${color_warning}WARNING: $1${color_reset}"
  mkdir -p $tkis_output 

  if [ -d $WO ] ; then
    if [[ $tkis_process != "" ]] ; then
      echo -e "${color_warning}WARNING: $1${color_reset}" >> ${tkis_output}warning.$tkis_process
    fi
  fi
}

# 1 = message
debug(){

  if [[ $tkis_print_debug == "yes" ]] ; then
    echo -e "${color_notice}DEBUG:$color_reset $1"
    mkdir -p $tkis_output 

    if [ -d $WO ] ; then
      if [[ $tkis_process != "" ]] ; then
        echo -e "${color_notice}DEBUG:$color_reset $1" >> ${tkis_output}debug.$tkis_process
      fi
    fi
  fi
}

echoit(){
  if [[ $tkis_silent != "true" ]] ; then
    echo -e "$color_important$*$color_reset"
  fi
}

notice(){
  if [[ $tkis_silent != "true" ]] ; then
    echo -e "$color_highlight$*$color_reset"
  fi
}

# this is a quick and dirty implementation, nothing fancy, and nowhere near as good as it could be
tkis_print_environment(){
  mkdir -p $tkis_data

  echo "#!/bin/bash" > ${tkis_data}environment.$list_filename
  echo "# The following is defined internally"          >> ${tkis_data}environment.$list_filename
  echo "tkis_path='$tkis_path'"                         >> ${tkis_data}environment.$list_filename
  echo "tkis_global_settings='$tkis_global_settings'"   >> ${tkis_data}environment.$list_filename
  echo                                                  >> ${tkis_data}environment.$list_filename

  echo "# The following is defined in ${WO}global_settings" >> ${tkis_data}environment.$list_filename
  cat ${SE}global_settings | sed -e '/^#/d'             >> ${tkis_data}environment.$list_filename
  echo                                                  >> ${tkis_data}environment.$list_filename

  # Make sure anything at this point does not depend on any of the following environment variables, because they are not defined yet at this point
  sed -i -e "s|\$AR|$AR|g" -e "s|\${AR}|$AR|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$PA|$PA|g" -e "s|\${PA}|$PA|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$PR|$PR|g" -e "s|\${PR}|$PR|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$RU|$RU|g" -e "s|\${RU}|$RU|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$SC|$SC|g" -e "s|\${SC}|$SC|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$SE|$SE|g" -e "s|\${SE}|$SE|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$SY|$SY|g" -e "s|\${SY}|$SY|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$TO|$TO|g" -e "s|\${TO}|$TO|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$WO|$WO|g" -e "s|\${WO}|$WO|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$PO|$PO|g" -e "s|\${PO}|$PO|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$TA|$TA|g" -e "s|\${TA}|$TA|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$TC|$TC|g" -e "s|\${TC}|$TC|g" ${tkis_data}environment.$list_filename
  sed -i -e "s|\$tkis_path|$tkis_path|g" -e "s|\${tkis_path}|$tkis_path|g" ${tkis_data}environment.$list_filename

  echo "# The following are defined internally"         >> ${tkis_data}environment.$list_filename
  echo "AR='$AR'"                                       >> ${tkis_data}environment.$list_filename
  echo "PA='$PA'"                                       >> ${tkis_data}environment.$list_filename
  echo "AR='$AR'"                                       >> ${tkis_data}environment.$list_filename
  echo "PR='$PR'"                                       >> ${tkis_data}environment.$list_filename
  echo "RU='$RU'"                                       >> ${tkis_data}environment.$list_filename
  echo "SC='$SC'"                                       >> ${tkis_data}environment.$list_filename
  echo "SE='$SE'"                                       >> ${tkis_data}environment.$list_filename
  echo "SY='$SY'"                                       >> ${tkis_data}environment.$list_filename
  echo "TO='$TO'"                                       >> ${tkis_data}environment.$list_filename
  echo "WO='$WO'"                                       >> ${tkis_data}environment.$list_filename
  echo "PO='$PO'"                                       >> ${tkis_data}environment.$list_filename
  echo "TC='$TC'"                                       >> ${tkis_data}environment.$list_filename
  echo "TA='$TA'"                                       >> ${tkis_data}environment.$list_filename
  echo "tkis_data='$tkis_data'"                         >> ${tkis_data}environment.$list_filename
  echo "tkis_output='$tkis_output'"                     >> ${tkis_data}environment.$list_filename
  echo "documentation_directory='$documentation_directory'" >> ${tkis_data}environment.$list_filename
  echo                                                  >> ${tkis_data}environment.$list_filename

  if [ -f ${SE}settings-$list_filename ] ; then
    echo "# The following is defined in ${WO}settings-$list_filename" >> ${tkis_data}environment.$list_filename
    cat ${SE}settings-$list_filename | sed -e '/^#/d'   >> ${tkis_data}environment.$list_filename
    echo                                                >> ${tkis_data}environment.$list_filename
  fi

  echo "# The following is a light version of tkis_local functions to make things easier to run by hand" >> ${tkis_data}environment.$list_filename
  cat ${PO}tkis_local_environment | sed -e '/^#/d'      >> ${tkis_data}environment.$list_filename
}

# a quick and simple implementation, nothing fancy so clock skews will mess this up
tkis_calculate_time(){
  if [[ $tkis_output != "" ]] ; then mkdir -p $tkis_output ; fi

  local stop_time_second=
  local stop_time_minute=
  local stop_time_hour=
  local stop_time_day=
  local day_difference=
  local hour_difference=
  local minute_difference=
  local second_difference=

  let stop_time_second=$(date --utc +%-S)
  let stop_time_minute=$(date --utc +%-M)
  let stop_time_hour=$(date --utc +%-H)
  let stop_time_day=$(date --utc +%-d)
  let day_difference=$[ $stop_time_day - $start_time_day ]
  let hour_difference=$[ $stop_time_hour - $start_time_hour ]
  let minute_difference=$[ $stop_time_minute - $start_time_minute ]
  let second_difference=$[ $stop_time_second - $start_time_second ]

  debug "start day \"$start_time_day\"; stop day \"$stop_time_day\"; difference \"$day_difference\""
  debug "start hour \"$start_time_hour\"; stop hour \"$stop_time_hour\"; difference \"$hour_difference\""
  debug "start minute \"$start_time_minute\"; stop minute \"$stop_time_minute\"; difference \"$minute_difference\""
  debug "start second \"$start_time_second\"; stop second \"$stop_time_second\"; difference \"$second_difference\""

  let day_difference=$[ $stop_time_day - $start_time_day ]

  # correct the seconds
  if [[ $second_difference -lt 0 ]] ; then
    let second_difference=$[ $second_difference + 60 ]
    let minute_difference=$[ $minute_difference - 1]
  fi

  # correct the minutes
  if [[ $minute_difference -lt 0 ]] ; then
    let minute_difference=$[ $minute_difference + 60 ]
    let hour_difference=$[ $hour_difference - 1]
  fi

  # correct the gours
  if [[ $hour_difference -lt 0 ]] ; then
    let hour_difference=$[ $hour_difference + 24 ]
    let day_difference=$[ $day_difference - 1]
  fi

  # obtain days
  # yeah..I am not waisting my time trying to calculate days based on a dynamic time-system, where number of days in a month are constantly changing
  # so let any errors happen and enjoy your -1 days!
  echo

  if [[ $tkis_process == "" ]] ; then
    echo -e "${color_title}Execution Time:${color_reset} $color_highlight$day_difference$color_reset ${color_notice}days${color_reset} $color_highlight$hour_difference$color_reset ${color_notice}hours${color_reset} $color_highlight$minute_difference$color_reset ${color_notice}minutes${color_reset} $color_highlight$second_difference$color_reset ${color_notice}seconds${color_reset}"
    echo -e "${color_title}Execution Time:${color_reset} $color_highlight$day_difference$color_reset ${color_notice}days${color_reset} $color_highlight$hour_difference$color_reset ${color_notice}hours${color_reset} $color_highlight$minute_difference$color_reset ${color_notice}minutes${color_reset} $color_highlight$second_difference$color_reset ${color_notice}seconds${color_reset}" >> ${tkis_output}build_time
  else
    echo -e "${color_title}Execution Time of $tkis_process:${color_reset} $color_highlight$day_difference$color_reset ${color_notice}days${color_reset} $color_highlight$hour_difference$color_reset ${color_notice}hours${color_reset} $color_highlight$minute_difference$color_reset ${color_notice}minutes${color_reset} $color_highlight$second_difference$color_reset ${color_notice}seconds${color_reset}"
    echo -e "${color_title}Execution Time of $tkis_process:${color_reset} $color_highlight$day_difference$color_reset ${color_notice}days${color_reset} $color_highlight$hour_difference$color_reset ${color_notice}hours${color_reset} $color_highlight$minute_difference$color_reset ${color_notice}minutes${color_reset} $color_highlight$second_difference$color_reset ${color_notice}seconds${color_reset}" >> ${tkis_output}build_time.$tkis_process
  fi

  echo
}
