-- references:
-- https://en.wikipedia.org/wiki/Public_holidays_in_South_Africa
{-# LANGUAGE OverloadedStrings #-}

module Holidays.SouthAfrica (
  holidays,
) where

import Data.Time

import Holidays.Base
import Holidays.DateFinder
import Holidays.DateTransform

holidays :: ([Year -> Holiday], [DateTransform])
holidays :: ([Year -> Holiday], [DateTransform])
holidays =
  ( [ Text -> Day -> Holiday
hday Text
"new_years_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
newYearsDay,
      Text -> Day -> Holiday
hday Text
"good_friday" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
goodFriday,
      Text -> Day -> Holiday
hday Text
"family_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
easterSunday,
      Text -> Day -> Holiday
hday Text
"human_rights_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
mar DayOfMonth
21,
      Text -> Day -> Holiday
hday Text
"freedom_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
apr DayOfMonth
27,
      Text -> Day -> Holiday
hday Text
"workers_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
workersDay,
      Text -> Day -> Holiday
hday Text
"youth_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
jun DayOfMonth
16,
      Text -> Day -> Holiday
hday Text
"womens_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
aug DayOfMonth
9,
      Text -> Day -> Holiday
hday Text
"heritage_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
sep DayOfMonth
24,
      Text -> Day -> Holiday
hday Text
"day_of_reconciliation" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
dec DayOfMonth
16,
      Text -> Day -> Holiday
hday Text
"christmas_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
christmasDay,
      Text -> Day -> Holiday
hday Text
"day_of_goodwill" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
boxingDay,
      -- special days
      Text -> Day -> Holiday
hday Text
"general_elections_2024" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Year -> Bool) -> Day -> Day
years (Year -> Year -> Bool
forall a. Eq a => a -> a -> Bool
== Year
2024) (Day -> Day) -> (Year -> Day) -> Year -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
may DayOfMonth
29
    ],
    [DateTransform
sundayRule]
  )