interface Page implements Entity {
  id: Int!
  uuid: String!
  entity: String!
  language: String
  name: String!
  url: String!
  entityLinks: EntityLinks

  published: Boolean
  changed: String!
}

type EntityList {
  total: Int!
  items: [Page!]
}

type Teaser {
  image: MediaImage
  text: String
}

type Article implements Page & Entity {
  id: Int!
  uuid: String!
  name: String!
  entity: String!
  url: String!
  language: String
  entityLinks: EntityLinks

  published: Boolean!
  changed: String!

  created: String!
  author: User
  channel: Channel
  tags: [Tags]
  seoTitle: String!
  content: [Paragraph]
  teaser: Teaser
}

type NewsArticle implements Page & Entity {
  id: Int!
  uuid: String!
  name: String!
  entity: String!
  url: String!
  language: String
  entityLinks: EntityLinks

  published: Boolean!
  changed: String!

  created: String!
  author: User
  channel: Channel
  tags: [Tags]
  seoTitle: String!
  content: [Paragraph]
  teaser: Teaser
}

type BasicPage implements Page & Entity {
  id: Int!
  uuid: String!
  name: String!
  entity: String!
  url: String!
  language: String
  entityLinks: EntityLinks

  published: Boolean!
  changed: String!

  created: String!
  author: User
  content: [Paragraph]
}

type Tags implements Page & Entity {
  id: Int!
  uuid: String!
  name: String!
  entity: String!
  url: String!
  language: String
  entityLinks: EntityLinks

  published: Boolean!
  changed: String!

  content: [Paragraph]
  articles(offset: Int = 0, limit: Int, languages: [String]): EntityList
}

type Channel implements Page & Entity {
  id: Int!
  uuid: String!
  name: String!
  entity: String!
  url: String!
  language: String
  entityLinks: EntityLinks

  published: Boolean!
  changed: String!

  parent: Channel
  content: [Paragraph]
  articles(offset: Int = 0, limit: Int, languages: [String]): EntityList
}

type User implements Page & Entity {
  id: Int!
  uuid: String!
  name: String!
  entity: String!
  url: String!
  language: String
  entityLinks: EntityLinks

  published: Boolean
  changed: String!

  created: String!
  mail: String
  access: String
  picture: Thumbnail
}
