// This is an automatically generated code sample.
// To make this code sample work in your Oracle Cloud tenancy,
// please replace the values for any parameters whose current values do not fit
// your use case (such as resource IDs, strings containing ‘EXAMPLE’ or ‘unique_id’, and
// boolean, number, and enum parameters with values not fitting your use case).

import * as ospgateway from "oci-ospgateway";
import common = require("oci-common");

// Create a default authentication provider that uses the DEFAULT
// profile in the configuration file.
// Refer to <see href="https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm#SDK_and_CLI_Configuration_File>the public documentation</see> on how to prepare a configuration file.

const provider: common.ConfigFileAuthenticationDetailsProvider = new common.ConfigFileAuthenticationDetailsProvider();

(async () => {
  try {
    // Create a service client
    const client = new ospgateway.SubscriptionServiceClient({
      authenticationDetailsProvider: provider
    });

    // Create a request and dependent object(s).
    const authorizeSubscriptionPaymentDetails = {
      subscription: {
        id: "ocid1.test.oc1..<unique_ID>EXAMPLE-id-Value",
        subscriptionPlanNumber: "EXAMPLE-subscriptionPlanNumber-Value",
        planType: ospgateway.models.Subscription.PlanType.FreeTier,
        timeStart: new Date("Sun Jul 04 06:34:53 UTC 2032"),
        shipToCustAcctSiteId: "ocid1.test.oc1..<unique_ID>EXAMPLE-shipToCustAcctSiteId-Value",
        shipToCustAcctRoleId: "ocid1.test.oc1..<unique_ID>EXAMPLE-shipToCustAcctRoleId-Value",
        billToCustAccountId: "ocid1.test.oc1..<unique_ID>EXAMPLE-billToCustAccountId-Value",
        isIntentToPay: true,
        currencyCode: "EXAMPLE-currencyCode-Value",
        gsiOrgCode: "EXAMPLE-gsiOrgCode-Value",
        languageCode: "EXAMPLE-languageCode-Value",
        organizationId: "ocid1.test.oc1..<unique_ID>EXAMPLE-organizationId-Value",
        upgradeState: ospgateway.models.Subscription.UpgradeState.Upgraded,
        upgradeStateDetails: ospgateway.models.Subscription.UpgradeStateDetails.UpgradeError,
        accountType: ospgateway.models.Subscription.AccountType.CorporateSubmitted,
        taxInfo: {
          taxPayerId: "ocid1.test.oc1..<unique_ID>EXAMPLE-taxPayerId-Value",
          taxRegNumber: "EXAMPLE-taxRegNumber-Value",
          noTaxReasonCode: "EXAMPLE-noTaxReasonCode-Value",
          noTaxReasonCodeDetails: "EXAMPLE-noTaxReasonCodeDetails-Value",
          taxCnpj: "EXAMPLE-taxCnpj-Value",
          giro: "EXAMPLE-giro-Value"
        },
        paymentOptions: [
          {
            paymentMethod: "CREDIT_CARD",
            creditCardType: ospgateway.models.CreditCardType.Elo,
            lastDigits: "EXAMPLE-lastDigits-Value",
            nameOnCard: "EXAMPLE-nameOnCard-Value",
            timeExpiration: new Date("Tue Aug 28 11:24:09 UTC 2035"),
            walletInstrumentId: "ocid1.test.oc1..<unique_ID>EXAMPLE-walletInstrumentId-Value",
            walletTransactionId: "ocid1.test.oc1..<unique_ID>EXAMPLE-walletTransactionId-Value"
          }
        ],
        paymentGateway: {
          merchantDefinedData: {
            promoType: "EXAMPLE-promoType-Value",
            cloudAccountName: "EXAMPLE-cloudAccountName-Value"
          }
        },
        billingAddress: {
          addressKey: "EXAMPLE-addressKey-Value",
          line1: "EXAMPLE-line1-Value",
          line2: "EXAMPLE-line2-Value",
          line3: "EXAMPLE-line3-Value",
          line4: "EXAMPLE-line4-Value",
          streetName: "EXAMPLE-streetName-Value",
          streetNumber: "EXAMPLE-streetNumber-Value",
          city: "EXAMPLE-city-Value",
          county: "EXAMPLE-county-Value",
          country: "EXAMPLE-country-Value",
          province: "EXAMPLE-province-Value",
          postalCode: "EXAMPLE-postalCode-Value",
          state: "EXAMPLE-state-Value",
          emailAddress: "EXAMPLE-emailAddress-Value",
          companyName: "EXAMPLE-companyName-Value",
          firstName: "EXAMPLE-firstName-Value",
          middleName: "EXAMPLE-middleName-Value",
          lastName: "EXAMPLE-lastName-Value",
          phoneCountryCode: "EXAMPLE-phoneCountryCode-Value",
          phoneNumber: "EXAMPLE-phoneNumber-Value",
          jobTitle: "EXAMPLE-jobTitle-Value",
          departmentName: "EXAMPLE-departmentName-Value",
          internalNumber: "EXAMPLE-internalNumber-Value",
          contributorClass: "EXAMPLE-contributorClass-Value",
          stateInscription: "EXAMPLE-stateInscription-Value",
          municipalInscription: "EXAMPLE-municipalInscription-Value"
        },
        timePlanUpgrade: new Date("Thu Apr 01 12:05:08 UTC 2032"),
        timePersonalToCorporateConv: new Date("Sun Sep 06 08:55:38 UTC 2037")
      },
      languageCode: "EXAMPLE-languageCode-Value",
      email: "EXAMPLE-email-Value"
    };

    const authorizeSubscriptionPaymentRequest: ospgateway.requests.AuthorizeSubscriptionPaymentRequest = {
      ospHomeRegion: "EXAMPLE-ospHomeRegion-Value",
      subscriptionId: "ocid1.test.oc1..<unique_ID>EXAMPLE-subscriptionId-Value",
      compartmentId: "ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value",
      authorizeSubscriptionPaymentDetails: authorizeSubscriptionPaymentDetails,
      ifMatch: "EXAMPLE-ifMatch-Value",
      opcRetryToken: "EXAMPLE-opcRetryToken-Value",
      opcRequestId: "H1FXTGQ1FZGRGUCPXF0L<unique_ID>"
    };

    // Send request to the Client.
    const authorizeSubscriptionPaymentResponse = await client.authorizeSubscriptionPayment(
      authorizeSubscriptionPaymentRequest
    );
  } catch (error) {
    console.log("authorizeSubscriptionPayment Failed with error  " + error);
  }
})();