#! /bin/bash

export TODO_SERVER_URL="${TODO_SERVER_URL:-"https://todo-server.remote.blapointe.com"}"
export TODO_SERVER_HEADERS="${TODO_SERVER_HEADERS:-"Cookie: BOAuthZ=$TODO_SERVER_BOAUTHZ"}"
export TODO_SERVER_LIST="${TODO_SERVER_LIST:-"2548023766"}"

main() {
   from_todo_server_to_pttodo_main "$@"
}

from_todo_server_to_pttodo_main() {
   set -e
   set -o pipefail
   local tasks_in_todo="$(fetch_tasks_in_list | format_tasks_in_list)"
   local schedule_tasks_in_flight="$(COMPL=1 LOOPING=1 fetch_tasks_in_list | format_tasks_in_list)"
   echo "{\"todo\": $tasks_in_todo, \"scheduled\": $schedule_tasks_in_flight, \"done\": []}" | yq -P eval -
}

format_tasks_in_list() {
   jq -c .list[] | while read -r line; do
      echo "$line" \
         | jq '{
            todo: .title,
            details:.note,
            ts: (if .compl == 1 then (.dateCompleted | strptime("%d %b %Y %I:%M %p") | mktime) else .dateEditedInt end),
            subtasks: [],
            tags: .tags,
            schedule: (if (.cron != "") then (.cron) else (.loop) end)
         }' \
         | jq -c .
   done | jq -sc | yq -P eval - | grep -v -E ' (""|\[]|0s)$' | yq -j eval - | jq -c .
}

fetch_tasks_in_list() {
   todo_server_curl "$TODO_SERVER_URL/ajax.php?loadTasks=&list=$TODO_SERVER_LIST&compl=${COMPL:-0}&looping=${LOOPING:-0}"
}

todo_server_curl() {
   local csv_headers="$TODO_SERVER_HEADERS"
   local headers=()
   while [ "$csv_headers" != "" ]; do
      header="${csv_headers%%,*}"
      headers+=("-H" "${header%%:*}: ${header#*:}")
      if echo "$csv_headers" | grep -q ,; then
         csv_headers="${csv_headers#*,}"
      else
         csv_headers=""
      fi
   done
   curl -sS "${headers[@]}" "$@"
}

if [ "$0" == "$BASH_SOURCE" ]; then
   main "$@"
fi
