{- |
    Module : Data.Text.Interp.CLI

    Helper functions and types for CLI use
-}
module Data.Text.Interp.CLI
  ( Input(..)
  , opts
  ) where

import Data.Semigroup ((<>))
import Options.Applicative
import System.IO (FilePath)


-- | Record to hold CLI options
data Input = Input {
             substF :: FilePath -- ^ path to the substitutions file
           , interpF :: FilePath -- ^ path to the interpolations file
           }

-- | CLI parser for `Input`
input :: Parser Input
input = Input <$> (
        (strOption $ long "substitutions"
         <> help "JSON file containing map of substitutions")
        <|>
        (strArgument $ metavar "SUBST"
          <> help "JSON file containing map of substitutions")
        ) <*> (
        (strOption $ long "interpolations"
           <> help "file containing text to interpolate")
        <|>
         (strArgument $ metavar "INTERP"
           <> help "file containing text to interpolate"))

-- | ParserInfo for `Input`
opts :: ParserInfo Input
opts = info (input <**> helper)
          (fullDesc
          <> progDesc "Randomly interpolate values into a template"
          <> header "interp")