module Penny.Cabin.Balance.MultiCommodity.Parser (
  ParseOpts(..)
  , allSpecs
  ) where

import qualified Penny.Cabin.Options as CO
import qualified Penny.Cabin.Parsers as P
import qualified System.Console.MultiArg as MA

-- | Options for the Balance report that have been parsed from the
-- command line.
data ParseOpts = ParseOpts
  { showZeroBalances :: CO.ShowZeroBalances
  , order :: P.SortOrder
  }


zeroBalances :: MA.OptSpec (ParseOpts -> ParseOpts)
zeroBalances = fmap toResult P.zeroBalances
  where
    toResult szb o = o { showZeroBalances = szb }

parseOrder :: MA.OptSpec (ParseOpts -> ParseOpts)
parseOrder = fmap toResult P.order
  where
    toResult x o = o { order = x }

allSpecs :: [MA.OptSpec (ParseOpts -> ParseOpts)]
allSpecs = [zeroBalances, parseOrder]