import apiFetch from '../../../../functions/fetch';
import { Component, State, h, Prop } from '@stencil/core';
import { __ } from '@wordpress/i18n';
import { addQueryArgs, getQueryArg } from '@wordpress/url';
import { Universe } from 'stencil-wormhole';
export class ScOrderConfirmation {
  constructor() {
    /** Loading */
    this.loading = false;
  }
  componentWillLoad() {
    // @ts-ignore
    Universe.create(this, this.state());
    // get teh session
    this.getSession();
  }
  /** Get session id from url. */
  getSessionId() {
    var _a;
    if ((_a = this.order) === null || _a === void 0 ? void 0 : _a.id)
      return this.order.id;
    return getQueryArg(window.location.href, 'order');
  }
  /** Update a session */
  async getSession() {
    var _a;
    if (!this.getSessionId())
      return;
    if ((_a = this.order) === null || _a === void 0 ? void 0 : _a.id)
      return;
    try {
      this.loading = true;
      this.order = (await await apiFetch({
        path: addQueryArgs(`surecart/v1/checkouts/${this.getSessionId()}`, {
          expand: [
            'line_items',
            'line_item.price',
            'line_item.fees',
            'price.product',
            'customer',
            'customer.shipping_address',
            'payment_intent',
            'discount',
            'manual_payment_method',
            'discount.promotion',
            'billing_address',
            'shipping_address',
          ],
          refresh_status: true,
        }),
      }));
    }
    catch (e) {
      if (e === null || e === void 0 ? void 0 : e.message) {
        this.error = e.message;
      }
      else {
        this.error = __('Something went wrong', 'surecart');
      }
    }
    finally {
      this.loading = false;
    }
  }
  state() {
    var _a, _b;
    const manualPaymentMethod = (_a = this.order) === null || _a === void 0 ? void 0 : _a.manual_payment_method;
    return {
      processor: 'stripe',
      loading: this.loading,
      orderId: this.getSessionId(),
      order: this.order,
      customer: (_b = this.order) === null || _b === void 0 ? void 0 : _b.customer,
      manualPaymentTitle: manualPaymentMethod === null || manualPaymentMethod === void 0 ? void 0 : manualPaymentMethod.name,
      manualPaymentInstructions: manualPaymentMethod === null || manualPaymentMethod === void 0 ? void 0 : manualPaymentMethod.instructions,
    };
  }
  renderOnHold() {
    var _a, _b, _c;
    if (((_a = this.order) === null || _a === void 0 ? void 0 : _a.status) !== 'processing')
      return null;
    if (((_c = (_b = this === null || this === void 0 ? void 0 : this.order) === null || _b === void 0 ? void 0 : _b.payment_intent) === null || _c === void 0 ? void 0 : _c.processor_type) === 'paypal') {
      return (h("sc-alert", { type: "warning", open: true }, __('Paypal is taking a closer look at this payment. It’s required for some payments and normally takes up to 3 business days.', 'surecart')));
    }
  }
  renderManualInstructions() {
    var _a;
    const paymentMethod = (_a = this.order) === null || _a === void 0 ? void 0 : _a.manual_payment_method;
    if (!(paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.instructions))
      return;
    return (h("sc-alert", { type: "info", open: true },
      h("span", { slot: "title" }, paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.name), paymentMethod === null || paymentMethod === void 0 ? void 0 :
      paymentMethod.instructions));
  }
  render() {
    var _a, _b;
    return (h(Universe.Provider, { state: this.state() },
      h("div", { class: { 'order-confirmation': true } },
        h("div", { class: {
            'order-confirmation__content': true,
            'hidden': !((_a = this.order) === null || _a === void 0 ? void 0 : _a.id) && !this.loading,
          } },
          h("sc-order-confirm-components-validator", { checkout: this.order },
            h("slot", null))),
        !((_b = this.order) === null || _b === void 0 ? void 0 : _b.id) && !this.loading && (h("sc-heading", null,
          __('Order not found.', 'surecart'),
          h("span", { slot: "description" }, __('This order could not be found. Please try again.', 'surecart')))))));
  }
  static get is() { return "sc-order-confirmation"; }
  static get encapsulation() { return "shadow"; }
  static get originalStyleUrls() { return {
    "$": ["sc-order-confirmation.css"]
  }; }
  static get styleUrls() { return {
    "$": ["sc-order-confirmation.css"]
  }; }
  static get properties() { return {
    "order": {
      "type": "unknown",
      "mutable": true,
      "complexType": {
        "original": "Checkout",
        "resolved": "Checkout",
        "references": {
          "Checkout": {
            "location": "import",
            "path": "../../../../types"
          }
        }
      },
      "required": false,
      "optional": false,
      "docs": {
        "tags": [],
        "text": ""
      }
    }
  }; }
  static get states() { return {
    "loading": {},
    "error": {}
  }; }
}
