import gql from 'graphql-tag';

export const CONTRACTS = gql`
  query Contracts($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        id
        payerId
        legacySummaryId
        hasActiveDefault
        status
        payerName
        created
        payer {
          name
          nationalId
          email
          id
        }
        departmentName
        departmentId
        productDescription
        latestPeriodEnd
        extraPayers {
          id
          payerId
          contractId
          status
          amount
          paymentCategory
        }
        contractItems {
          id
          type
          variantId
          status
          creditControlSettings {
            id
            contractItemId
            canToggle
            isToggledOn
          }
          ... on ServiceContractItem {
            serviceId
            serviceInfo {
              id
              type
              nickname
              userId
              userName
            }
          }
          ... on DeviceContractItem {
            trackingCode
            rentalInfo {
              status
              trackingCode
              externalOrderId
            }
          }
          ... on SignupContractItem {
            signupOrderItemId
          }
          variant {
            id
            name
            price
            monthlyCharge
            isHidden
          }
        }
        variant {
          id
          name
          productName
          monthlyCharge
          ... on SubscriptionVariant {
            monthlyCharge
            eesDataVolume
            slug
            startDate
            planType
            description
          }
          ... on ProvisionedSubscriptionVariant {
            monthlyCharge
            name
            slug
            price
            description
          }
          ... on Variant {
            productName
            monthlyCharge
            startDate
          }
        }
        paymentMethod {
          name
          id
          ... on CreditCardPaymentMethod {
            id
            customerId
            type
            status
            isDefault
            maskedNumber
            nick
            issuer
            expiry
          }
          ... on BankClaimPaymentMethod {
            id
            customerId
            type
            status
            isDefault
          }
        }
      }
    }
  }
`;

export const CONTRACT_LIST = gql`
  query ContractList($input: ContractsInput!) {
    contractsWithPagination(input: $input) {
      contracts {
        id
        status
        payerName
        departmentName
        departmentId
        hasActiveDefault
        created
        paymentMethod {
          name
          id
          ... on CreditCardPaymentMethod {
            id
            customerId
            type
            status
            isDefault
            maskedNumber
            nick
            issuer
            expiry
          }
          ... on BankClaimPaymentMethod {
            id
            customerId
            type
            status
            isDefault
          }
        }
        extraPayers {
          id
          payerId
          contractId
          status
          amount
          paymentCategory
        }
        contractItems {
          id
          type
          variantId
          status
          creditControlSettings {
            id
            contractItemId
            canToggle
            isToggledOn
          }
          ... on ServiceContractItem {
            serviceId
            serviceInfo {
              id
              type
              nickname
              userId
              userName
            }
          }
          ... on DeviceContractItem {
            trackingCode
            rentalInfo {
              status
              trackingCode
              externalOrderId
            }
          }
          ... on SignupContractItem {
            signupOrderItemId
          }
          variant {
            id
            name
            price
            monthlyCharge
            isHidden
          }
        }
        variant {
          id
          name
          productName
          monthlyCharge
          ... on SubscriptionVariant {
            monthlyCharge
            planType
          }
          ... on ProvisionedSubscriptionVariant {
            monthlyCharge
            planType
          }
          ... on Variant {
            monthlyCharge
          }
        }
      }
      pageInfo {
        hasNextPage
        nextPage
        totalCount
      }
    }
  }
`;

export const CONTRACTS_DEPARTMENT_AND_PAYER = gql`
  query ContractsDepartmentAndPayer($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        payerId
        payerName
        departmentId
        departmentName
        id
        status
      }
    }
  }
`;

export const CONTRACTS_PAYER_NATIONALID = gql`
  query ContractsPayerNationalId($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        status
        payer {
          id
          nationalId
        }
      }
    }
  }
`;

export const CONTRACT_ITEMS = gql`
  query ContractItems($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        id
        status
        contractItems {
          id
          status
          variantId
          creditControlSettings {
            id
            contractItemId
            canToggle
            isToggledOn
          }
          variant {
            id
            name
            productName
            price
            monthlyCharge
          }
          ... on ServiceContractItem {
            serviceId
            serviceInfo {
              id
              type
              nickname
              userId
              userName
            }
          }
          ... on DeviceContractItem {
            trackingCode
            rentalInfo {
              status
              trackingCode
              externalOrderId
            }
          }
          ... on SignupContractItem {
            signupOrderItemId
          }
        }
        variant {
          id
        }
      }
    }
  }
`;

export const GET_CONTRACT_ID = gql`
  query GetContractId($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        status
        id
      }
    }
  }
`;

export const CONTRACT_STATUS = gql`
  query ContractStatus($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        id
        status
      }
    }
  }
`;

export const CONTRACT_ID_AND_SERVICE_INFO = gql`
  query ContractNameAndServiceInfo($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        id
        status
        contractItems {
          status
          creditControlSettings {
            id
            contractItemId
            canToggle
            isToggledOn
          }
          variantId
          ... on ServiceContractItem {
            serviceId
            serviceInfo {
              id
              type
              nickname
              userId
              userName
            }
          }
          ... on DeviceContractItem {
            trackingCode
            rentalInfo {
              status
              trackingCode
              externalOrderId
            }
          }
          ... on SignupContractItem {
            signupOrderItemId
          }
        }
        variant {
          id
        }
      }
    }
  }
`;

export const CONTRACTS_FOR_APPLICABLEVARIANTS = gql`
  query ContractsForApplicableVariants($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        id
        status
        variant {
          id
          name
          productName
          monthlyCharge
          ... on SubscriptionVariant {
            monthlyCharge
            category
            planType
            eesDataVolume
            slug
            startDate
          }
          ... on Variant {
            planType
            productName
            monthlyCharge
            startDate
          }
        }
        payer {
          id
          nationalId
        }
      }
    }
  }
`;

export const CONTRACTS_VARIANT = gql`
  query ContractsVariants($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        status
        variant {
          id
          monthlyCharge
          name
          productName
        }
      }
    }
  }
`;

export const CONTRACT_ITEMS_SERVICE_ID = gql`
  query ContractItemsServiceId($input: ContractInput!) {
    contract(input: $input) {
      contractItems {
        ... on ServiceContractItem {
          serviceId
        }
      }
    }
  }
`;

export const CONTRACT_ITEMS_ID = gql`
  query ContractItemsId($input: ContractsInput!) {
    contracts(input: $input) {
      contracts {
        status
        variantId
        contractItems {
          id
        }
      }
    }
  }
`;

export const AVAILABLE_OPTIONS = gql`
  query AvailableOptions($input: AvailableOptionsInput!) {
    availableOptions(input: $input) {
      availableSlots
      variants {
        id
        imageUrl
        monthlyCharge
        name
        productName
        description
      }
    }
  }
`;

export const CONTRACTS_AVAILABLE_VARIANTS = gql`
  query ContractsAvailableVariants($input: AvailableVariantsInput!) {
    contractsAvailableVariants(input: $input) {
      id
      name
    }
  }
`;

export const CONTRACTS_VARIANT_APPLICABILITY = gql`
  query ContractsVariantApplicability($input: VariantApplicabilityInput!) {
    contractsVariantApplicability(input: $input) {
      applicabilityOptions
      contractId
      currentVariantId
      hasUsedMoreThanIncluded
      isApplicable
      isApplicableImmediately
      isCurrent
    }
  }
`;
