module BibDB where

import Text.ParserCombinators.Parsec (parseFromFile)
import TypedBibData
import Config
import Control.Monad

------------
-- DB


loadBibliography cfg = loadBibliographyFrom (bibfile cfg)

loadBibliographyFrom fileName = do
  putStrLn ("Loading " ++ fileName)
  mBib <- fmap bibToForest <$> parseFromFile parseBib fileName
  case join (either (Left . show) Right $ mBib) of
    Left err -> return (Left err)
    Right bib -> do putStrLn $ show (length $ bib) ++ " entries loaded."
                    return (Right bib)

formatBib :: [Entry] -> [Char]
formatBib = concatMap formatEntry . map treeToEntry

saveBibliography :: InitFile -> [Entry] -> IO ()
saveBibliography cfg bib = do
  let formatted = formatBib bib
  writeFile (bibfile cfg) formatted 
  putStrLn $ show (length bib) ++ " entries saved to " ++ (bibfile cfg)


