{-# LANGUAGE NoImplicitPrelude #-}
module Main where
import GHC.Base
import GHC.Num ((-))
import Text.Show (show)
import Text.Read (readMaybe)
import System.IO (putStrLn, FilePath)
import Rhythmicity.MarkerSeqs hiding (id)
import Rhythmicity.BasicF
import Data.List
import Data.Maybe (fromMaybe)
import Data.Tuple (fst,snd)
import Phladiprelio.Ukrainian.PrepareText
import Phladiprelio.Ukrainian.Syllable
import Phladiprelio.Ukrainian.SyllableDouble
import System.Environment (getArgs)
import GHC.Int (Int8)
import CLI.Arguments
import CLI.Arguments.Get
import CLI.Arguments.Parsing
import Phladiprelio.Ukrainian.ReadDurations
generalF :: FilePath -> HashCorrections -> (Int8,[Int8]) -> Int -> String -> IO [()]
generalF file hc (grps,mxms) k rs = do
syllableDurationsDs <- readSyllableDurations file
mapM (\(x,y) -> putStrLn (show x `mappend` (' ':y))) . sortOn id . map ((\xss -> (f syllableDurationsDs xss, xss)) . unwords) . permutations . words $ rs
where f syllableDurationsDs = sum . countHashesG hc grps mxms . mconcat .
(if null file then case k of { 1 -> syllableDurationsD; 2 -> syllableDurationsD2; 3 -> syllableDurationsD3; 4 -> syllableDurationsD4}
else if length syllableDurationsDs >= k then syllableDurationsDs !! (k - 1) else syllableDurationsD2) . createSyllablesUkrS
main :: IO ()
main = do
args <- getArgs
let (argsB, arg2s) = takeBsR bSpecs args
fileDu = concat . getB "+d" $ argsB
sylD = let k = snd (fromMaybe 2 (readMaybe (concat . getB "+s" $ argsB)::Maybe Int) `quotRemInt` 4) in if k == 0 then 4 else k
hc = readHashCorrections . concat . getB "+h" $ argsB
grpp = grouppingR . concat . getB "+r" $ argsB
str1 = unwords . take 7 . words . mconcat . prepareText . unwords $ arg2s
generalF fileDu hc grpp sylD str1 >> return ()
bSpecs :: CLSpecifications
bSpecs = zip ["+d","+h","+r","+s"] . cycle $ [1]