import { gql } from 'graphql-tag'

export default gql`
  extend type Query {
    items(sub: String, sort: String, type: String, cursor: String, name: String, when: String, by: String, limit: Int): Items
    item(id: ID!): Item
    pageTitleAndUnshorted(url: String!): TitleUnshorted
    dupes(url: String!): [Item!]
    related(cursor: String, title: String, id: ID, minMatch: String, limit: Int): Items
    search(q: String, sub: String, cursor: String, what: String, sort: String, when: String, from: String, to: String): Items
    auctionPosition(sub: String, id: ID, bid: Int!): Int!
    itemRepetition(parentId: ID): Int!
  }

  type TitleUnshorted {
    title: String
    unshorted: String
  }

  type ItemActResult {
    vote: Int!
    sats: Int!
  }

  extend type Mutation {
    bookmarkItem(id: ID): Item
    subscribeItem(id: ID): Item
    deleteItem(id: ID): Item
    upsertLink(id: ID, sub: String, title: String!, url: String!, text: String, boost: Int, forward: [ItemForwardInput], hash: String, hmac: String): Item!
    upsertDiscussion(id: ID, sub: String, title: String!, text: String, boost: Int, forward: [ItemForwardInput], hash: String, hmac: String): Item!
    upsertBounty(id: ID, sub: String, title: String!, text: String, bounty: Int, hash: String, hmac: String, boost: Int, forward: [ItemForwardInput]): Item!
    upsertJob(id: ID, sub: String!, title: String!, company: String!, location: String, remote: Boolean,
      text: String!, url: String!, maxBid: Int!, status: String, logo: Int, hash: String, hmac: String): Item!
    upsertPoll(id: ID, sub: String, title: String!, text: String, options: [String!]!, boost: Int, forward: [ItemForwardInput], hash: String, hmac: String): Item!
    upsertComment(id:ID, text: String!, parentId: ID, hash: String, hmac: String): Item!
    dontLikeThis(id: ID!, sats: Int, hash: String, hmac: String): Boolean!
    act(id: ID!, sats: Int, hash: String, hmac: String): ItemActResult!
    pollVote(id: ID!, hash: String, hmac: String): ID!
  }

  type PollOption {
    id: ID,
    option: String!
    count: Int!
    meVoted: Boolean!
  }

  type Poll {
    meVoted: Boolean!
    count: Int!
    options: [PollOption!]!
  }

  type Items {
    cursor: String
    items: [Item!]!
    pins: [Item!]
  }

  type Comments {
    cursor: String
    comments: [Item!]!
  }

  type Item {
    id: ID!
    createdAt: Date!
    updatedAt: Date!
    deletedAt: Date
    title: String
    searchTitle: String
    url: String
    searchText: String
    text: String
    parentId: Int
    parent: Item
    root: Item
    user: User!
    userId: Int!
    depth: Int
    mine: Boolean!
    boost: Int!
    bounty: Int
    bountyPaidTo: [Int]
    sats: Int!
    commentSats: Int!
    lastCommentAt: Date
    upvotes: Int!
    wvotes: Float!
    meSats: Int!
    meDontLike: Boolean!
    meBookmark: Boolean!
    meSubscription: Boolean!
    meForward: Boolean
    outlawed: Boolean!
    freebie: Boolean!
    paidImgLink: Boolean
    ncomments: Int!
    comments(sort: String): [Item!]!
    path: String
    position: Int
    prior: Int
    maxBid: Int
    isJob: Boolean!
    pollCost: Int
    poll: Poll
    company: String
    location: String
    remote: Boolean
    sub: Sub
    subName: String
    status: String
    uploadId: Int
    otsHash: String
    parentOtsHash: String
    forwards: [ItemForward]
    imgproxyUrls: JSONObject
  }

  input ItemForwardInput {
    nym: String!
    pct: Int!
  }
`
