####################
#      Notes       #
####################
# For some reason, Omit doesn't like having a day in it's definition.
# You can get around this limitation by using REM without a message.
# If the rem has `SATISFY 1` in its definition, it will always be run and Trigdate
# will be set.
# You can then use Trigdate (or %T) in the omit definition
# https://blog.thechases.com/posts/remind/#omit-weekdays

####################
#     New Year     #
####################
# New Year is always January 1st
OMIT 01 Jan MSG New Year's Day
# Although, there will be a bank holliday on the following monday if
# new years day is on a weekend
OMIT 02 Jan [YEAR(CURRENT())] THROUGH 03 Jan [YEAR(CURRENT())] SATISFY [$Uw == 1] MSG New Year's Bank Holiday

####################
#      Easter      #
####################
# Easter is confusing, thankfully remind gives us a way to get it
SET easter EASTERDATE(YEAR(CURRENT()))
# Good Friday is always exactly 2 days before easter
OMIT [trigger(easter-2)] MSG Good Friday
# Easter is on easter
OMIT [trigger(easter)] MSG Easter Sunday
# Easter Monday is always 1 day after Easter
OMIT [trigger(easter+1)] MSG Easter Monday
# Mothering Sunday is always 3 weeks before easter
# It is not a bank holliday though so don't omit it
REM [trigger(easter-21)] MSG Mothering Sunday

####################
#     Christmas    #
####################
# Christmas is always the 25th December
REM 25 Dec SCANFROM [$U - 7] SATISFY 1
set christmas trigdate()

# Christmas eve is always the 24th December
# It is not a bank holliday though
REM [christmas - 1] MSG Christmas Eve

# if Christmas fell on a Saturday
IF wkdaynum(christmas) == 6
	REM [christmas] MSG Christmas Day
	REM [christmas+1] MSG Boxing Day
	# The following Mon and Tues will be bank hollidays
	OMIT [christmas+2] MSG Christmas day (substitute bank holliday)
	OMIT [christmas+3] MSG Boxing Day (substitute bank holliday)
ELSE
	# if it fell on a Friday
	IF wkdaynum(christmas) == 5
		OMIT [christmas] MSG Christmas Day
		REM [christmas+1] MSG Boxing Day
		OMIT [christmas+3] MSG Boxing Day (substitute bank holliday)
	ELSE
		# if it falls on a Sunday
		IF wkdaynum(christmas) == 0
			REM [christmas] MSG Christmas Day
			OMIT [christmas+1] MSG Boxing Day
			OMIT [christmas+2] MSG Christmas day (substitute bank holliday)
		ELSE
			# otherwise, observed=actual
			OMIT [christmas] MSG Christmas Day
			OMIT [christmas+1] MSG Boxing Day
		ENDIF
	ENDIF
ENDIF
# If I don't buy an advent callender, I'll be in trouble
REM 1 Dec ++7 MSG %"Advent starts %b%"%_Have you bought an advent callender%_scratchcard advent calender is on cork board

####################
#   Other Events   #
####################
# Valentine's day is always 14th February
REM 14 Feb ++14 MSG Valentine's Day %b
# Early May bank holliday is the first Monday in May
REM Mon 1 May SATISFY 1
OMIT [$T] MSG Early May Bank Holiday
# Spring bank holiday is the last Monday in May
# (7 days before first Monday in June)
REM Mon 1 Jun --7 SATISFY 1
OMIT [$T] MSG Spring Bank Holiday (Whitsun)
# 3rd Sunday of June
# This expression means the first Sunday after or on 15th June
REM Sun 15 Jun MSG Father's Day
# Summer bank holiday is the last Monday in May
# (7 days before first Monday in June)
REM Mon 1 Sep --7 SATISFY 1
OMIT [$T] MSG Summer Bank Holiday
# Black Friday is always the 4th Friday of November
# that is the same as saying the friday on or after the 22nd
REM Fri 22 November MSG Black Friday

####################
# Daylight Savings #
####################
# British summer time starts on the last Sunday of March
REM Sun 1 Apr --7 ++1 MSG %"Clocks Forward%" British Summer Time Starts
# British summer time ends on the last Sunday of October
REM Sun 1 Nov --7 ++1 MSG %"Clocks Backward%" British Summer Time Ends
