module Nix.Options where

import           Data.Text (Text)
import           Data.Time

data Options = Options
    { verbose      :: Verbosity
    , tracing      :: Bool
    , thunks       :: Bool
    , values       :: Bool
    , reduce       :: Maybe FilePath
    , reduceSets   :: Bool
    , reduceLists  :: Bool
    , parse        :: Bool
    , parseOnly    :: Bool
    , finder       :: Bool
    , findFile     :: Maybe FilePath
    , strict       :: Bool
    , normalize    :: Bool
    , evaluate     :: Bool
    , json         :: Bool
    , xml          :: Bool
    , attr         :: Maybe Text
    , include      :: [FilePath]
    , check        :: Bool
    , readFrom     :: Maybe FilePath
    , cache        :: Bool
    , repl         :: Bool
    , ignoreErrors :: Bool
    , expression   :: Maybe Text
    , arg          :: [(Text, Text)]
    , argstr       :: [(Text, Text)]
    , fromFile     :: Maybe FilePath
    , currentTime  :: UTCTime
    , filePaths    :: [FilePath]
    }
    deriving Show

defaultOptions :: UTCTime -> Options
defaultOptions current = Options
    { verbose      = ErrorsOnly
    , tracing      = False
    , thunks       = False
    , values       = False
    , reduce       = Nothing
    , reduceSets   = False
    , reduceLists  = False
    , parse        = False
    , parseOnly    = False
    , finder       = False
    , findFile     = Nothing
    , strict       = False
    , normalize    = False
    , evaluate     = False
    , json         = False
    , xml          = False
    , attr         = Nothing
    , include      = []
    , check        = False
    , readFrom     = Nothing
    , cache        = False
    , repl         = False
    , ignoreErrors = False
    , expression   = Nothing
    , arg          = []
    , argstr       = []
    , fromFile     = Nothing
    , currentTime  = current
    , filePaths    = []
    }

data Verbosity
    = ErrorsOnly
    | Informational
    | Talkative
    | Chatty
    | DebugInfo
    | Vomit
    deriving (Eq, Ord, Enum, Bounded, Show)