type Image {
  id: ID!
  title: String
  code: String
  # rating expressed as 1-100
  rating100: Int
  url: String @deprecated(reason: "Use urls")
  urls: [String!]!
  date: String
  details: String
  photographer: String
  o_counter: Int
  organized: Boolean!
  created_at: Time!
  updated_at: Time!

  files: [ImageFile!]! @deprecated(reason: "Use visual_files")
  visual_files: [VisualFile!]!
  paths: ImagePathsType! # Resolver
  galleries: [Gallery!]!
  studio: Studio
  tags: [Tag!]!
  performers: [Performer!]!
}

type ImageFileType {
  mod_time: Time!
  size: Int!
  width: Int!
  height: Int!
}

type ImagePathsType {
  thumbnail: String # Resolver
  preview: String # Resolver
  image: String # Resolver
}

input ImageUpdateInput {
  clientMutationId: String
  id: ID!
  title: String
  code: String
  # rating expressed as 1-100
  rating100: Int
  organized: Boolean
  url: String @deprecated(reason: "Use urls")
  urls: [String!]
  date: String
  details: String
  photographer: String

  studio_id: ID
  performer_ids: [ID!]
  tag_ids: [ID!]
  gallery_ids: [ID!]

  primary_file_id: ID
}

input BulkImageUpdateInput {
  clientMutationId: String
  ids: [ID!]
  title: String
  code: String
  # rating expressed as 1-100
  rating100: Int
  organized: Boolean
  url: String @deprecated(reason: "Use urls")
  urls: BulkUpdateStrings
  date: String
  details: String
  photographer: String

  studio_id: ID
  performer_ids: BulkUpdateIds
  tag_ids: BulkUpdateIds
  gallery_ids: BulkUpdateIds
}

input ImageDestroyInput {
  id: ID!
  delete_file: Boolean
  delete_generated: Boolean
}

input ImagesDestroyInput {
  ids: [ID!]!
  delete_file: Boolean
  delete_generated: Boolean
}

type FindImagesResultType {
  count: Int!
  "Total megapixels of the images"
  megapixels: Float!
  "Total file size in bytes"
  filesize: Float!
  images: [Image!]!
}
