# ===============================================
# NAVIGATION
# ===============================================

extend type Query {
  navigation: NavigationQuery
}

extend type Mutation {
  navigation: NavigationMutation
}

# -----------------------------------------------
# QUERIES
# -----------------------------------------------

type NavigationQuery {
  tree: [NavigationTree]! @auth(requires: ["manage:navigation", "manage:system"])
  config: NavigationConfig! @auth(requires: ["manage:navigation", "manage:system"])
}

# -----------------------------------------------
# MUTATIONS
# -----------------------------------------------

type NavigationMutation {
  updateTree(
    tree: [NavigationTreeInput]!
  ): DefaultResponse @auth(requires: ["manage:navigation", "manage:system"])
  updateConfig(
    mode: NavigationMode!
  ): DefaultResponse @auth(requires: ["manage:navigation", "manage:system"])
}

# -----------------------------------------------
# TYPES
# -----------------------------------------------

type NavigationTree {
  locale: String!
  items: [NavigationItem]!
}

input NavigationTreeInput {
  locale: String!
  items: [NavigationItemInput]!
}

type NavigationItem {
  id: String!
  kind: String!
  label: String
  icon: String
  targetType: String
  target: String
  visibilityMode: String
  visibilityGroups: [Int]
}

input NavigationItemInput {
  id: String!
  kind: String!
  label: String
  icon: String
  targetType: String
  target: String
  visibilityMode: String
  visibilityGroups: [Int]
}

type NavigationConfig {
  mode: NavigationMode!
}

enum NavigationMode {
  NONE
  TREE
  MIXED
  STATIC
}
