{-| 

A ledger-compatible @print@ command.

-}

module Hledger.Cli.Print (
  print'
 ,showTransactions
) where
import Data.List

import Hledger
import Prelude hiding (putStr)
import Hledger.Utils.UTF8 (putStr)
import Hledger.Cli.Options

-- | Print journal transactions in standard format.
print' :: CliOpts -> Journal -> IO ()
print' CliOpts{reportopts_=ropts} j = do
  d <- getCurrentDay
  putStr $ showTransactions ropts (optsToFilterSpec ropts d) j

showTransactions :: ReportOpts -> FilterSpec -> Journal -> String
showTransactions opts fspec j = entriesReportAsText opts fspec $ entriesReport opts fspec j

entriesReportAsText :: ReportOpts -> FilterSpec -> EntriesReport -> String
entriesReportAsText opts _ items = concatMap (showTransactionForPrint (effective_ opts)) items