content: -- | Common things among reports
  
  module OrgStat.Outputs.Class
         ( ReportOutput (..)
         ) where
  
  import Universum
  
  import qualified Data.Text.IO as T
  import qualified Diagrams.Backend.SVG as DB
  import qualified Diagrams.Prelude as D
  import System.FilePath (replaceExtension)
  
  import OrgStat.Outputs.Types (BlockOutput(..), SummaryOutput(..), TimelineOutput(..))
  
  -- | Things that reporters output an what we can do with them.
  class ReportOutput a where
      -- | Writes report to the disk, given path to file.
      writeReport :: (MonadIO m) => FilePath -> a -> m ()
  
  instance ReportOutput TimelineOutput where
      writeReport path (TimelineOutput diagram) =
          liftIO $ DB.renderSVG (replaceExtension path "svg") size diagram
        where
          size = D.dims2D (D.width diagram) (D.height diagram)
  
  instance ReportOutput SummaryOutput where
      writeReport path (SummaryOutput text) =
          liftIO $ T.writeFile (replaceExtension path "txt") text
  
  instance ReportOutput BlockOutput where
      writeReport path (BlockOutput text) =
          liftIO $ T.writeFile (replaceExtension path "txt") text
  