package cif

import (
	"errors"
	"time"

	"git.fjla.uk/owlboard/timetable-mgr/log"
	"go.uber.org/zap"
)

// Fetches the day string for the provided date.
func getDayString(t time.Time) string {
	london, err := time.LoadLocation("Europe/London")
	if err != nil {
		log.Msg.Error("Unable to load time zone info", zap.Error(err))
	}

	timeNow := t.In(london)
	day := timeNow.Weekday()

	dayStrings := [...]string{"sun", "mon", "tue", "wed", "thu", "fri", "sat"}

	return dayStrings[day]
}

// Simply returns the correct URL for either a 'daily' or 'full' update.
func getUpdateUrl(updateType string) (string, error) {
	if updateType == "daily" {
		return dailyUpdateUrl, nil
	} else if updateType == "full" {
		return fullUpdateUrl, nil
	}
	err := errors.New("invalid update type provided, must be one of 'daily' or 'full'")
	return "", err
}

// Takes a time.Time as input and returns True if it is
// the same day as now, or false if it is not the same day as now
func isSameToday(t time.Time) bool {
	today := time.Now().In(time.UTC)
	return t.Year() == today.Year() && t.Month() == today.Month() && t.Day() == today.Day()
}

// Returns how many days ago `t` was compared to today
func howManyDaysAgo(t time.Time) int {
	today := time.Now().In(time.UTC).Truncate(24 * time.Hour)
	input := t.In(time.UTC).Truncate(24 * time.Hour)

	diff := today.Sub(input)
	days := int(diff.Hours() / 24)
	return days
}
