module FuzzyTime.Spanish (showFuzzyTimeEs) where
import FuzzyTime
import Prelude hiding (min)
showFuzzyTimeEs :: FuzzyTime -> String
showFuzzyTimeEs fc@(FuzzyClock _ caps _ _ _ _ _) = capsizeDef caps (showFuzzyTimeEsHlp fc)
showFuzzyTimeEs ft@(FuzzyTimer _ _) = showFuzzyTimeEsHlp ft
showFuzzyTimeEsHlp :: FuzzyTime -> String
showFuzzyTimeEsHlp fc@(FuzzyClock am _ clock hour _ min style)
| min == 0 = if getHour hour == "la medianoche" then getHour hour else getHour hour ++ getAm hour
| min <= 30 = getHour hour ++ " y " ++ getMin min ++ getAm hour
| min > 30 = getHour (nextFTHour fc) ++ " menos " ++ getMin (60min) ++ getAm (nextFTHour fc)
| otherwise = "Oops, looks like it's " ++ show hour ++ ":" ++ show min ++ "."
where
getAm :: Int -> String
getAm h =
if style==3 && getHour h /= "la medianoche" then
if hh < 13 then " de la mañana" else
if hh < 21 then " de la tarde" else " de la noche"
else ""
where
hh :: Int
hh = if clock==12 && h < 12 && not am then h+12 else h
getHour :: Int -> String
getHour h
| h `mod` clock == 1= "la una"
| h `elem` [0, 24] = if style==1 then "las " ++ numeralEs clock else "la medianoche"
| otherwise = "las " ++ numeralEs h
getMin :: Int -> String
getMin m
| m `elem` [15, 45] = "cuarto"
| m == 30 = "media"
| otherwise = numeralEs m
showFuzzyTimeEsHlp (FuzzyTimer _ _) = "Spanish is not yet available in the timer mode.\nIf you can provide a translation, please contact kamil.stachowski@gmail.com."
numeralEs :: Int -> String
numeralEs n
| n < 20 = numeralEsHelper1 n
| n == 20 = "veinte"
| n == 21 = "veintiuno"
| n == 22 = "veintidós"
| n == 23 = "veintitrés"
| n == 26 = "veintiséis"
| n < 30 = "veinti" ++ numeralEsHelper1 (n `mod` 10)
| n `mod` 10 == 0 = numeralEsHelper10 (n `div` 10)
| otherwise = numeralEsHelper10 (n `div` 10) ++ " y " ++ numeralEsHelper1 (n `mod` 10)
where
numeralEsHelper1 :: Int -> String
numeralEsHelper1 i = ["una", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince", "dieciséis", "diecisiete", "dieciocho", "diecinueve"] !! (i1)
numeralEsHelper10 :: Int -> String
numeralEsHelper10 i = ["treinta", "cuarenta", "cincuenta"] !! (i3)