#!/bin/bash

today() {
  TODAYDIR="$AOCROOT/$CURRYEAR/day$CURRDAY" 
  if [ ! -d $TODAYDIR ]; then
    mkdir $TODAYDIR
  fi
  echo $TODAYDIR
}

getsharelink() {
  echo "Getting share path"    
  YR=$CURRYEAR
  DY=$CURRDAY

  PWD=$(pwd)
  PWD=${PWD#$AOCROOT/}
  if [[ "$PWD" =~ ^[1-9][0-9]{3}/day[0-2][0-9]$ ]]; then
    YR=${PWD:0:4}
    DY=${PWD:5:5}
    DY=${DY/day/}
  fi
  echo "https://git.bullercodeworks.com/brian/adventofcode/src/branch/main/$YR/day$DY/main.go"
}

getproblem() {
  YR=$CURRYEAR
  DY=$CURRDAY
  DIRDY=$CURRDAY

  PWD=$(pwd)
  PWD=${PWD#$AOCROOT/}
  if [[ "$PWD" =~ ^[1-9][0-9]{3}/day[0-2][0-9]$ ]]; then
    YR=${PWD:0:4}
    DY=${PWD:5:5}
    DY=${DY/day0/}
    DY=${DY/day/}
    DIRDY=$DY
  fi
  if [[ ! -d "$AOCROOT/$YR/day$DY" ]]; then
    mkdir "$AOCROOT/$YR/day$DY"
  fi
  cd "$AOCROOT/$YR/day$DY"
  if [[ -f "problem" ]]; then
    echo "Found problem file."
    if [[ $1 != "-f" ]]; then
      # Check if the file already exists
      echo "Not forcing overwrite."
      exit 1
    fi
  fi

  # Remove any zero padding from day
  DY=$(echo "$DY"|awk '$0*=1')
  echo "Getting problem at $YR/day/$DY"
  elinks -dump https://adventofcode.com/$CURRYEAR/day/$DY > problem
}

getinput() {
  YR=$CURRYEAR
  DY=$CURRDAY
  DIRDY=$CURRDAY

  PWD=$(pwd)
  PWD=${PWD#$AOCROOT/}
  if [[ "$PWD" =~ ^[1-9][0-9]{3}/day[0-2][0-9]$ ]]; then
    YR=${PWD:0:4}
    DY=${PWD:5:5}
    DY=${DY/day0/}
    DY=${DY/day/}
  fi
  if [[ ! -d "$AOCROOT/$YR/day$DIRDY" ]]; then
    mkdir "$AOCROOT/$YR/day$DIRDY"
  fi
  cd "$AOCROOT/$YR/day$DIRDY"
  if [[ -f "input" ]]; then
    echo "Found input file."
    if [[ $1 != "-f" ]]; then
      # Check if the file already exists
      echo "Not forcing overwrite."
      exit 1
    fi
  fi

  # Remove any zero padding from day
  DY=$(echo "$CURRDAY"|awk '$0*=1')
  echo "Getting input for $CURRYEAR/day/$DY"
  echo "https://adventofcode.com/$CURRYEAR/day/$DY/input"
  echo "session=$(getsessiontoken)"
  curl --cookie "session=$(getsessiontoken)" https://adventofcode.com/$CURRYEAR/day/$DY/input > input
}

getsessiontoken() {
  FULLCOOKIE=$(grep "adventofcode" $HOME/.elinks/cookies)
  if [[ ! -n "$FULLCOOKIE" ]]; then
    echo "Error pulling elinks cookie"
    exit 1
  fi
  echo $FULLCOOKIE | cut -d" " -f2
}

help() {
  echo "Usage: aoc [option]"
  echo "Available Options:"
  echo "" 
  echo "  today           - Echo the current day's directory, creating it if it doesn't exist"
  echo "" 
  echo "  getproblem      - Retrieve the problem for the day associated with the current directory"
  echo "                    If the current directory isn't a specific problem (\d\d\d\d/day\d\d/)"
  echo "                    then it changes to today's directory, making it if needed"
  echo ""
  echo "  getinput        - Retrieve the input for the day associated with the current directory"
  echo "                    If the current directory isn't a specific problem (\d\d\d\d/day\d\d/)"
  echo "                    then it changes to today's directory, making it if needed"
  echo ""
  echo "  getsessiontoken - Echo the session token from the elinks cookie file"
  echo "" 
  echo "  getsharelink    - Get the repo remote path for the main.go file in the current directory"
  echo "                    If the current directory isn't a specific problem (\d\d\d\d/day\d\d/)"
  echo "                    then it uses today's directory"
  echo "" 
  echo "  help            - Display this message"
  echo "" 
}

case $1 in
  "today") 
    today
    ;;
  "getproblem") 
    getproblem
    ;;
  "getinput") 
    getinput
    ;;
  "getsessiontoken")
    getsessiontoken
    ;;
  "getsharelink")
    getsharelink
    ;;
  *) 
    help
    ;;
esac