# A big schema for testing
type Query {
  node(id: ID!): Node
}

interface Node {
  id: ID!
}

interface Node2 {
  id: ID
}

interface Commentable {
  id: ID!
  comments: [Comment!]!
}

interface Named {
  name: String!
}
type Comment implements Node {
  author: Player
  body: String!
  id: ID!
}

type Card implements Node, Commentable, Node2, Named {
  name: String!
  converted_mana_cost: Int!
  mana_cost: String!
  colors: [Color!]!
  power: Int
  toughness: Int
  rules_text: String!
  id: ID!
  comments: [Comment!]!
}

type Printing implements Node, Commentable, Node2 {
  card: Card!
  expansion: Expansion!
  rarity: Rarity!
  artist: Artist!
  id: ID!
  comments: [Comment!]!
}

type Expansion implements Node, Commentable, Named {
  name: String!
  code: String!
  printings: [Printing!]!
  block: Block!
  id: ID!
  comments: [Comment!]!
}

type Block implements Node, Commentable, Named {
  name: String!
  expansions: [Expansion!]!
  id: ID!
  comments: [Comment!]!
}

# Eg shard, guild, clan
type Watermark implements Node, Commentable, Named {
  name: String!
  cards: [Card!]!
  colors: [Color!]!
  id: ID!
  comments: [Comment!]!
}

type Artist implements Node, Commentable, Named {
  name: String!
  printings: [Printing!]!
  id: ID!
  comments: [Comment!]!
}

type Player implements Node, Commentable, Named {
  name: String!
  decks: [Deck!]!
  id: ID!
  comments: [Comment!]!
}

type Deck implements Node, Commentable, Named {
  name: String!
  colors: [Color!]!
  slots: [Slot!]!
  id: ID!
  comments: [Comment!]!
}

type Slot implements Node, Commentable {
  deck: Deck!
  card: Card!
  id: ID!
  comments: [Comment!]!
}

enum Color {
  WHITE
  BLUE
  BLACK
  RED
  GREEN
  COLORLESS
}

enum Rarity {
  COMMON
  UNCOMMON
  RARE
  MYTHIC_RARE
  TIMESHIFTED
}
