import { gql } from '@apollo/client'
import { COMMENTS } from './comments'

// we can't import from users because of circular dependency
const STREAK_FIELDS = gql`
  fragment StreakFields on User {
    optional {
      streak
      hasSendWallet
      hasRecvWallet
    }
  }
`

export const ITEM_FIELDS = gql`
  ${STREAK_FIELDS}
  fragment ItemFields on Item {
    id
    parentId
    createdAt
    invoicePaidAt
    deletedAt
    title
    url
    user {
      id
      name
      meMute
      ...StreakFields
    }
    sub {
      name
      userId
      moderated
      meMuteSub
      meSubscription
      nsfw
      replyCost
    }
    otsHash
    position
    sats
    credits
    meAnonSats @client
    boost
    bounty
    bountyPaidTo
    noteId
    path
    upvotes
    meSats
    meCredits
    meDontLikeSats
    meBookmark
    meSubscription
    meForward
    outlawed
    freebie
    bio
    ncomments
    nDirectComments
    commentSats
    commentCredits
    lastCommentAt
    isJob
    status
    company
    location
    remote
    subName
    pollCost
    pollExpiresAt
    uploadId
    mine
    imgproxyUrls
    rel
    apiKey
    invoice {
      id
      actionState
      confirmedAt
    }
    cost
  }`

export const ITEM_FULL_FIELDS = gql`
  ${ITEM_FIELDS}
  ${STREAK_FIELDS}
  fragment ItemFullFields on Item {
    ...ItemFields
    text
    root {
      id
      title
      bounty
      bountyPaidTo
      subName
      mine
      ncomments
      user {
        id
        name
        ...StreakFields
      }
      sub {
        name
        userId
        moderated
        meMuteSub
        meSubscription
        replyCost
      }
    }
    forwards {
      userId
      pct
      user {
        name
      }
    }
  }`

export const ITEM_OTS_FIELDS = gql`
  fragment ItemOtsFields on Item {
    id
    title
    text
    url
    parentOtsHash
    otsHash
    deletedAt
  }`

export const ITEM_OTS = gql`
  ${ITEM_OTS_FIELDS}

  query Item($id: ID!) {
    item(id: $id) {
      ...ItemOtsFields
    }
  }`

export const POLL_FIELDS = gql`
  fragment PollFields on Item {
    poll {
      meVoted
      meInvoiceId
      meInvoiceActionState
      count
      options {
        id
        option
        count
      }
      randPollOptions
    }
  }`

export const ITEM = gql`
  ${ITEM_FULL_FIELDS}
  ${POLL_FIELDS}

  query Item($id: ID!) {
    item(id: $id) {
      ...ItemFullFields
      ...PollFields
    }
  }`

export const ITEM_FULL = gql`
  ${ITEM_FULL_FIELDS}
  ${POLL_FIELDS}
  ${COMMENTS}
  query Item($id: ID!, $sort: String, $cursor: String) {
    item(id: $id) {
      ...ItemFullFields
      prior
      ...PollFields
      comments(sort: $sort, cursor: $cursor) {
        cursor
        comments {
          ...CommentsRecursive
        }
      }
    }
  }`

export const RELATED_ITEMS = gql`
  ${ITEM_FIELDS}
  query Related($title: String, $id: ID, $cursor: String, $limit: Limit) {
    related(title: $title, id: $id, cursor: $cursor, limit: $limit) {
      cursor
      items {
        ...ItemFields
      }
    }
  }
`

export const RELATED_ITEMS_WITH_ITEM = gql`
  ${ITEM_FIELDS}
  query Related($title: String, $id: ID!, $cursor: String, $limit: Limit) {
    item(id: $id) {
      ...ItemFields
    }
    related(title: $title, id: $id, cursor: $cursor, limit: $limit) {
      cursor
      items {
        ...ItemFields
      }
    }
  }
`
