module M_advent where

import Mdl
import System.Time


advent :: Mdl
advent log = react f
  where
  f (Msg from _ _ "PRIVMSG" (to:"adventskranz":_))
    = do t <- getClockTime
         caltime <- toCalendarTime t
         let d = ctDay caltime
             m = fromEnum (ctMonth caltime) + 1
             y = ctYear caltime
         return (map output (lines (adventskranz d m y)))
    where
    output x = "PRIVMSG "++tgt from to++" :"++x
    tgt from to = if isAlpha (head to) then from else to


adventskranz d 12 y
  | d>24 = "Weihnachten ist vorbei, Idiot!"
adventskranz d m y
  | m<11 = "Wann faengt bei Dir bitte die Weihnachtszeit an?!"
  | wochenbis>4 = "Der Adventskranz ist doch noch LAENGST nicht aufgestellt! dg UNGEDULD"
  | otherwise = adv (4 - wochenbis)
  where
  vierter = 24 - zeller 24 12 y
  tagebis = (if m==11 then 30 else 0) + vierter-d
  wochenbis = ceiling (fromIntegral (max 0 tagebis) / 7)



-- zeller's congruence, shifted so that sun=0
zeller d m y = (d + ((m'+1)*26)/10 + y' + y'/4 + c/4 + 5*c + 6) `mod` 7
  where
  m' = if m>2 then m else 12+m
  (c,y') = y `divMod` 100
  (/) = div


adv 0 = "           \ETX14I                         I\ETX\n\
        \          \ETX5.\ETX14I\ETX5.                       .\ETX14I\ETX5.\ETX\n\
        \         \ETX5|   |    .\ETX14I\ETX5.       .\ETX14I\ETX5.    |   |\ETX\n"
        ++ adv'

adv 1 = "                                     \ETX8.\ETX\n\
        \                                    \ETX8/ \\\ETX\n\
        \           \ETX14I                       \ETX8( \ETX14I \ETX8)\ETX\n\
        \          \ETX5.\ETX14I\ETX5.                       \ETX5.\ETX14I\ETX5.\ETX\n\
        \         \ETX5|   |    .\ETX14I\ETX5.       .\ETX14I\ETX5.    |   |\ETX\n"
        ++ adv'

adv 2 = "                                     \ETX8.\ETX\n\
        \                                    \ETX8/ \\\ETX\n\
        \           \ETX14I                 \ETX8.     ( \ETX14I \ETX8)\ETX\n\
        \          \ETX5.\ETX14I\ETX5.               \ETX8/ \\     \ETX5.\ETX14I\ETX5.\ETX\n\
        \         \ETX5|   |    .\ETX14I\ETX5.      \ETX8(\ETX5.\ETX14I\ETX5.\ETX8)\ETX5   |   |\ETX\n"
        ++ adv'

adv 3 = "                                     \ETX8.\ETX\n\
        \                                    \ETX8/ \\\ETX\n\
        \           \ETX14I       \ETX8.         .     ( \ETX14I \ETX8)\ETX\n\
        \          \ETX5.\ETX14I\ETX5.     \ETX8/ \\       / \\     \ETX5.\ETX14I\ETX5.\ETX\n\
        \         \ETX5|   |   \ETX8(\ETX5.\ETX14I\ETX5.\ETX8)     (\ETX5.\ETX14I\ETX5.\ETX8)   \ETX5|   |\ETX\n"
        ++ adv'

adv 4 = "           \ETX8.                         .\ETX\n\
        \          \ETX8/ \\                       / \\\ETX\n\
        \         \ETX8( \ETX14I \ETX8)     .         .     ( \ETX14I \ETX8)\ETX\n\
        \          \ETX5.\ETX14I\ETX5.     \ETX8/ \\       / \\     \ETX5.\ETX14I\ETX5.\ETX\n\
        \         \ETX5|   |   \ETX8(\ETX5.\ETX14I\ETX5.\ETX8)     (\ETX5.\ETX14I\ETX5.\ETX8)   \ETX5|   |\ETX\n"
        ++ adv'

adv' = "         \ETX5|   |    | |       | |    |   |\ETX\n\
       \         \ETX5|   |    | |       | |    |   |\ETX\n\
       \         \ETX5|   |\ETX3_.xx\ETX5|_+\ETX3-xxx---\ETX5|_|\ETX3xx._\ETX5|   |\ETX\n\
       \      \ETX3_.-\ETX5|   |\ETX3   xx    xxx      xx \ETX5|   |\ETX3-._\ETX\n\
       \    \ETX3xX   \ETX5'---'\ETX3XX  _xx___xxx____ xx \ETX5'---'\ETX3XXX`,\ETX\n\
       \   \ETX3|    XXXXXX   '--XXXXX------'XXX      XX  |\ETX\n\
       \    \ETX3\\ XXXXXX      XXXXX       XXXXX     XXX /\ETX\n\
       \     \ETX3`\"XXX_     XXXXX       XXXXX     _XX-\"'\ETX\n\
       \           \ETX3'\"-XXXXX-------XXAoS-----\"'\ETX"
