module FuzzyTime.Dutch (showFuzzyTimeNl) where
import FuzzyTime
import Prelude hiding (min)
showFuzzyTimeNl :: FuzzyTime -> String
showFuzzyTimeNl fc@(FuzzyClock _ caps _ _ _ _ _) = capsizeDef caps (showFuzzyTimeNlHlp fc)
showFuzzyTimeNl ft@(FuzzyTimer _ _) = showFuzzyTimeNlHlp ft
showFuzzyTimeNlHlp :: FuzzyTime -> String
showFuzzyTimeNlHlp fc@(FuzzyClock _ _ clock hour _ min style)
| min == 0 = if getHour hour == "middernacht" then getHour hour else getHour hour ++ " uur"
| min `elem` [20..29]
&& style == 2 = getMin (30min) ++ " voor half " ++ getHour (nextFTHour fc)
| min < 30 = getMin min ++ " over " ++ getHour hour
| min `elem` [31..40]
&& style == 2 = getMin (min30) ++ " over half " ++ getHour (nextFTHour fc)
| min == 30 = "half " ++ getHour (nextFTHour fc)
| min > 30 = getMin (60min) ++ " voor " ++ getHour (nextFTHour fc)
| otherwise = "Oops, looks like it's " ++ show hour ++ ":" ++ show min ++ "."
where
getHour :: Int -> String
getHour h
| h `elem` [0, 24] = if style==1 then
numeralNl clock
else
if min /= 30 then "middernacht" else numeralNl clock
| otherwise = numeralNl h
getMin :: Int -> String
getMin m
| m `elem` [15, 45] = "kwart"
| otherwise = numeralNl m
showFuzzyTimeNlHlp (FuzzyTimer _ mins)
| mins > 0 = "over " ++ showHelper
| mins == 0 = "nu!"
| mins < 0 = "! " ++ showHelper ++ " geleden !"
where
showHelper :: String
showHelper
| mm > 90 = numeralNl hours ++ (if half then " en een half" else "") ++ " uur"
| mm == 90 = "anderhalf uur"
| mm == 75 = "vijf kwartier"
| mm == 60 = "een uur"
| mm == 45 = "drie kwartier"
| mm == 30 = "een half uur"
| mm == 15 = "een kwartier"
| mm > 1 = numeralNl mm ++ " minuten"
| mm == 1 = "een minuut"
| otherwise = "Oops, it looks like there's " ++ show mins ++ " left."
hours :: Int
hours = round $ (fromIntegral mm :: Float) / 60
mm :: Int
mm = abs mins
half :: Bool
half = mm `mod` 60 == 30
numeralNl :: Int -> String
numeralNl n
| n < 20 = numeralNlHelper1 n
| n `mod` 10 == 0 = numeralNlHelper10 (n `div` 10)
| otherwise = numeralNlHelper1 (n `mod` 10) ++
(if (n `mod` 10) `elem` [2, 3] then "ën" else "en") ++
numeralNlHelper10 (n `div` 10)
where
numeralNlHelper1 :: Int -> String
numeralNlHelper1 i = ["een", "twee", "drie", "vier", "vijf", "zes", "zeven", "acht", "negen", "tien", "elf", "twaalf", "dertien", "veertien", "vijftien", "zestien", "zeventien", "achttien", "negentien"] !! (i1)
numeralNlHelper10 :: Int -> String
numeralNlHelper10 i = ["twintig", "dertig", "veertig", "vijftig"] !! (i2)