module Data.Morpheus.Parser.RootHead
  ( rootHeadArguments
  ) where

import           Data.Attoparsec.Text               (Parser, char, sepBy, skipSpace)
import           Data.Morpheus.Parser.Primitive     (getPosition, token, variable)
import           Data.Morpheus.Types.Query.Operator (Variable (..), VariableDefinitions)
import           Data.Text                          (Text)

rootHeadVariable :: Parser (Text, Variable)
rootHeadVariable = do
  skipSpace
  pos <- getPosition
  variableName <- variable
  skipSpace
  _ <- char ':'
  skipSpace
  variableType <- token
  pure (variableName, Variable variableType pos)

rootHeadArguments :: Parser VariableDefinitions
rootHeadArguments = do
  skipSpace
  _ <- char '('
  skipSpace
  parameters <- rootHeadVariable `sepBy` (skipSpace *> char ',')
  skipSpace
  _ <- char ')'
  pure parameters