-- | Common things among reports

module OrgStat.Report.Class
       ( Report (..)
       ) where

import qualified Diagrams.Backend.SVG as DB
import qualified Diagrams.Prelude     as D
import           System.FilePath      (replaceExtension, (</>))
import           Universum

import           OrgStat.Report.Types (SVGImageReport (..))

-- | Things that reporters output an what we can do with them.
class Report a where
    -- | Writes report to the disk, given directory and filename.
    writeReport :: (MonadIO m) => FilePath -> FilePath -> a -> m ()

instance Report SVGImageReport where
    writeReport dir filename (SVGImage diagram) =
        liftIO $ DB.renderSVG (replaceExtension (dir </> filename) "svg") size diagram
      where
        size = D.dims2D (D.width diagram) (D.height diagram)