module Buffet.Parse.ParseMenu
  ( get
  ) where

import qualified Buffet.Parse.Menu as Menu
import qualified Buffet.Parse.ParseMenuFromFile as ParseMenuFromFile
import qualified Buffet.Parse.ParseMenuFromFolder as ParseMenuFromFolder
import qualified Control.Exception as Exception
import Prelude (FilePath, IO, Show, ($), (<>), show)
import qualified System.Directory as Directory

newtype Exception =
  Exception FilePath

instance Show Exception where
  show (Exception path) = "No such menu file or folder: " <> path

instance Exception.Exception Exception

get :: FilePath -> IO Menu.Menu
get menu = do
  isAvailable <- Directory.doesPathExist menu
  if isAvailable
    then do
      isFolder <- Directory.doesDirectoryExist menu
      if isFolder
        then ParseMenuFromFolder.get menu
        else ParseMenuFromFile.get menu
    else Exception.throwIO $ Exception menu