#!/usr/bin/env bash

set -e
set -o pipefail

# Create a new daily email post for the next subsequent date.
# args:
#   - date:
#     - "next" for the next subsequent date based on the existing files.
#     - Any other value, e.g. a date, will be used explicitly.
#   - title: The title to use for the post.
function task:daily {
  # Find the next post date based on the last post in the directory.
  local next_date
  if [[ "${1}" == "next" ]]; then
    next_date=$(ls -1 src/content/daily-email  | tail -n 1 | tr -d '.md' | xargs -I {} date +%Y-%m-%d -d '{} +1 day')
  else
    next_date="${1}"
  fi

  local filepath="src/content/daily-email/${next_date}.md"

  shift 1

  # Generate the title and slug.
  local title="${*}"
  local slug
  slug=$(echo "${title}" | awk '{print tolower($0)}' | tr ' ' '-')

  # Create the file.
  cp -f --no-clobber stub.md "${filepath}"

  local day
  local month
  local year
  date=$(date -d "${next_date}" +%Y-%m-%d)
  day=$(date -d "${next_date}" +%d)
  month=$(date -d "${next_date}" +%m)
  year=$(date -d "${next_date}" +%Y)

  # Replace the placeholders.
  sed -i "s/{{ date }}/${date}/" "${filepath}"
  sed -i "s/{{ title }}/${title}/" "${filepath}"
  sed -i "s#{{ permalink }}#archive/${year}/${month}/${day}/${slug}#" "${filepath}"

  # Create a commit with the appropriate date in the message
  git add "${filepath}"
  git commit -m "daily-email: add ${date}"

  echo "${filepath}"
}

function task:help {
  echo "task:help"
}

eval "task:${*:-help}"