module Database.Trek.Parser where
import Options.Generic
import Database.PostgreSQL.Simple.PartialOptions
import qualified Options.Applicative.Builder as B

data Command = Apply PartialOptions FilePath | Create String
  deriving (Show, Eq, Generic)

instance ParseRecord Command where
  parseRecord = do
    let applyParser
           =  Apply
          <$> parseRecord
          <*> B.strArgument (B.metavar "FILEPATH")

        createParser
          = Create <$> B.strArgument (B.metavar "NAME")

    B.subparser
     (  B.command "apply"
          (B.info applyParser (B.progDesc "Apply migrations"))
     <> B.command "create"
          (B.info createParser (B.progDesc "Create migrations"))
     )