module FuzzyTime.Turkish (showFuzzyTimeTr) where
import FuzzyTime
import Prelude hiding (min)
showFuzzyTimeTr :: FuzzyTime -> String
showFuzzyTimeTr fc@(FuzzyClock _ caps _ _ _ _ _) = capsizeDef caps (showFuzzyTimeTrHlp fc)
showFuzzyTimeTr ft@(FuzzyTimer _ _) = showFuzzyTimeTrHlp ft
showFuzzyTimeTrHlp :: FuzzyTime -> String
showFuzzyTimeTrHlp ft@(FuzzyClock _ _ clock hour _ min style)
| min == 0 = "saat " ++ getHour Nom hour
| min `elem` [20..29]
&& style == 2 = getHour Nom hour ++ " buçuğa " ++ getMin (30min) ++ " var"
| min < 30 = getHour Acc hour ++ " " ++ getMin min ++ " geçiyor"
| min == 30 = if hour `mod` 12 == 0 then "saat yarım" else getHour Nom hour ++ " buçuk"
| min `elem` [31..40]
&& style == 2 = getHour Nom hour ++ " buçuğu " ++ getMin (min30) ++ " geçiyor"
| min > 30 = getHour Dat (nextFTHour ft) ++ " " ++ getMin (60min) ++ " var"
| otherwise = "Oops, looks like it's " ++ show hour ++ ":" ++ show min ++ "."
where
getHour :: Case -> Int -> String
getHour c h
| h `mod` 12 == 0 = if clock==12 then numeralTr c 12 else numeralTr c h
| otherwise = numeralTr c h
getMin :: Int -> String
getMin m
| m `elem` [15, 45] = "çeyrek"
| otherwise = numeralTr Nom m
showFuzzyTimeTrHlp (FuzzyTimer _ mins)
| mins > 0 = showHelper ++ " sonra"
| mins == 0 = "şimdi!"
| mins < 0 = "! " ++ showHelper ++ " önce !"
where
showHelper :: String
showHelper
| mm > 75 = numeralTr Nom hours ++ (if half then " buçuk" else "") ++ " saat"
| mm == 75 = "bir saat çeyrek"
| mm == 60 = "bir saat"
| mm == 45 = "üç çeyrek"
| mm == 30 = "yarım saat"
| mm == 15 = "bir çeyrek"
| mm >= 1 = numeralTr Nom mm ++ " dakika"
| 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
data Case = Nom | Dat | Acc
numeralTr :: Case -> Int -> String
numeralTr c n
| n < 10 = numeralTrHelper1 c n
| n `mod` 10 == 0 = numeralTrHelper10 c (n `div` 10)
| otherwise = numeralTrHelper10 Nom (n `div` 10) ++ " " ++ numeralTrHelper1 c (n `mod` 10)
where
numeralTrHelper1 :: Case -> Int -> String
numeralTrHelper1 Nom i = ["bir", "iki", "üç", "dört", "beş", "altı", "yedi", "sekiz", "dokuz"] !! (i1)
numeralTrHelper1 Dat i = ["bire", "ikiye", "üçe", "dörde", "beşe", "altıya", "yediye", "sekize", "dokuza"] !! (i1)
numeralTrHelper1 Acc i = ["biri", "ikiyi", "üçü", "dördü", "beşi", "altıyı", "yediyi", "sekizi", "dokuzu"] !! (i1)
numeralTrHelper10 :: Case -> Int -> String
numeralTrHelper10 Nom i = ["on", "yirmi", "otuz", "kırk", "elli"] !! (i1)
numeralTrHelper10 Dat i = ["ona", "yirmiye", "otuza", "kırka", "elliye"] !! (i1)
numeralTrHelper10 Acc i = ["onu", "yirmiyi", "otuzu", "kırkı", "elliyi"] !! (i1)