module Main where

import Grocery.Data.Grocery
import System.Environment( getArgs )
import System.Console.GetOpt
import Data.Maybe( fromMaybe, isJust ) 

datafile = "util/resources/groceries-new"

data AddOptions = AddOptions 
   { optInStock    :: Bool
   , optRecurrence :: Recurrence
   , optCategories :: [String]
   } deriving Show

defaultAddOptions = AddOptions 
   { optInStock    = False
   , optRecurrence = Medium
   , optCategories = []
   }

split	:: String -> [String]
split ""	=  []
split s  =  let (l, s') = break (== ',') s
            in  l : case s' of
                         [] -> []
                         (_:s'') -> split s''

addOptions :: [OptDescr (AddOptions -> AddOptions)]
addOptions =
   [ Option ['i'] ["inStock"] 
        (NoArg (\opts -> opts { optInStock = True }))
        "Instock (default=False)"
   , Option ['r'] ["recurrence"]
        (ReqArg (\rec opts -> opts { optRecurrence =  stringToRecurrence rec }) 
                 "high|med|low")
        "frequency item is needed"
   , Option ['c'] ["categories"]
        (ReqArg (\cat opts -> opts { optCategories = split cat }) 
                  "categories")
        "categories item belongs to"
   ]


getAddOptions :: [String] -> IO (AddOptions, [String])
getAddOptions argv =
   case getOpt Permute addOptions argv of
      (o,n,[]) -> return (foldl (flip id) defaultAddOptions o, n)
      (_,_,errs) -> ioError (userError (concat errs ++ usageInfo header addOptions))
   where header = "Usage: grocery add <name> [ ... ] "

main = do
   (cmd:name:args) <- getArgs
   print cmd
   print name
   print args
   (parsedAddArgs, _) <- getAddOptions args
   print $ show parsedAddArgs
--   groceries <- loadGroceryList datafile
--   mapM_ print groceries


