package models

import (
	"log"
)

type Date struct {
	Week   int // Set whether the date is all weeks (0), odd weeks (1) or even weeks (2).
	Day    int
	Hour   int
	Minute int
}

// Return the name of the day for a given integer.
func DayName(day int) string {
	switch day {
	case 0:
		return "Montag"
	case 1:
		return "Dienstag"
	case 2:
		return "Mittwoch"
	case 3:
		return "Donnerstag"
	case 4:
		return "Freitag"
	default:
		log.Printf("No day name found for day %d", day)
		return ""
	}
}

// Compare whether first date is strictly before second date.
func DateLess(first Date, second Date) bool {
	if first.Day < second.Day {
		return true
	} else if first.Day > second.Day {
		return false
	}
	if first.Hour < second.Hour {
		return true
	} else if first.Hour > second.Hour {
		return false
	}
	if first.Minute < second.Minute {
		return true
	} else if first.Minute > second.Minute {
		return false
	}
	return false
}

// Get the end date for some duration.
func GetEndDate(date Date, duration int, ignoreWeek bool) Date {
	var endDate Date
	if ignoreWeek {
		endDate = Date{0, date.Day, date.Hour, date.Minute} // deep copy
	} else {
		endDate = Date{date.Week, date.Day, date.Hour, date.Minute}
	}
	endDate.Day = (endDate.Day + (endDate.Hour*60+endDate.Minute+duration)/(60*24)) % 7
	endDate.Hour = (endDate.Hour + (endDate.Minute+duration)/60) % 24
	endDate.Minute = (endDate.Minute + duration) % 60
	return endDate
}
