'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

const index$1 = require('./index-0b1e2673.js');
require('./App-1647a125.js');
require('./_commonjsHelpers-937cd5b3.js');
const index$6 = require('./index-1a9e1965.js');
require('./index-451ca284.js');
const index$4 = require('./index-2eb96242.js');
const index = require('./index-36cf3884.js');
const index$7 = require('./index-061d0ccd.js');
const index$2 = require('./index-10a0b195.js');
const index$3 = require('./index-a802b56a.js');
const index$5 = require('./index-8a61808f.js');

const sv = {
  "Subscription number": "Prenumerationsnummer",
  Advanced: "Avancerat",
  "Create subscription": "Skapa prenumeration",
  "Start date": "Startdatum",
  "End date": "Slutdatum",
  Qty: "Antal",
  Name: "Namn",
  Price: "Pris",
  VAT: "Moms",
  daily: "Daglig",
  weekly: "Veckovis",
  monthly: "Månadsvis",
  quarterly: "Kvartalsvis",
  yearly: "Årlig",
  Day: "Dag",
  "Add item": "Lägg till artikel",
  "Creating subscription...": "Skapar prenumeration...",
  "$0 of $1 subscriptions were created.": "$0 av $1 prenumerationer skapades.",
  "Subscription was created.": "Prenumeration skapades.",
  "Failed to create $0 of $1 subscriptions.": "Kunde inte skapa $0 av $1 prenumerationer.",
  "Failed to create subscription.": "Kunde inte skapa prenumeration.",
};

function create(language) {
  return index.dist.create({
    sv,
  }, language);
}

const styleCss = ".sc-payfunc-subscription-create-h{display:block;max-width:63em}[hidden].sc-payfunc-subscription-create-h{display:none}smoothly-submit.sc-payfunc-subscription-create{max-width:min-content}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create{display:flex;flex-wrap:wrap;flex-direction:column}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create section.sc-payfunc-subscription-create{display:flex}smoothly-trigger.sc-payfunc-subscription-create{border:none;position:absolute;right:4em;top:1.4em}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create>main.sc-payfunc-subscription-create>content.sc-payfunc-subscription-create>*.sc-payfunc-subscription-create:not(.last):not(span),.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create>section.sc-payfunc-subscription-create>*.sc-payfunc-subscription-create:not(smoothly-trigger):not(smoothly-icon){margin-bottom:.7em;margin-left:-1px;flex-grow:1}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create payfunc-select-offset.sc-payfunc-subscription-create,.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create payfunc-total-amount.sc-payfunc-subscription-create,.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create smoothly-select.sc-payfunc-subscription-create,.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create smoothly-input.sc-payfunc-subscription-create{border:1px solid rgb(var(--smoothly-medium-color));border-collapse:collapse}smoothly-select.sc-payfunc-subscription-create{display:grid}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create>section.sc-payfunc-subscription-create>*.sc-payfunc-subscription-create:not(smoothly-select),.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create payfunc-total-amount.sc-payfunc-subscription-create{flex-shrink:2}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create>section.sc-payfunc-subscription-create>*.sc-payfunc-subscription-create:first-child{flex-grow:1}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create>main.sc-payfunc-subscription-create{display:flex;flex-direction:row}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create>main.sc-payfunc-subscription-create>content.sc-payfunc-subscription-create{min-width:37em}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create>main.sc-payfunc-subscription-create>content.sc-payfunc-subscription-create>section.sc-payfunc-subscription-create>smoothly-input.sc-payfunc-subscription-create:last-of-type{border-left:none}.sc-payfunc-subscription-create-h>form.sc-payfunc-subscription-create>main.sc-payfunc-subscription-create>content.sc-payfunc-subscription-create>section.sc-payfunc-subscription-create:first-of-type>*.sc-payfunc-subscription-create{display:flex;flex-wrap:nowrap;flex-grow:1}smoothly-icon.opened.sc-payfunc-subscription-create{transform:rotate(90deg);animation-duration:.5s}payfunc-future-due-dates.sc-payfunc-subscription-create{margin-left:.5em;min-width:13em}";

const PayfuncSubscriptionCreate = class {
  constructor(hostRef) {
    index$1.registerInstance(this, hostRef);
    this.notice = index$1.createEvent(this, "notice", 7);
    this.frequency = "monthly";
    this.currency = "SEK";
    this.advanced = false;
    this.itemCount = 0;
    this.itemsVisible = false;
    this.items = [];
  }
  componentWillLoad() {
    this.t = create(this.element);
    this.subscriptionNumber = index$2.dist.Identifier.generate(4);
    this.calculateSchedule();
  }
  componentDidRender() {
    const divisor = document.getElementById("divisor");
    const start = document.getElementById("start");
    const end = document.getElementById("end");
    const handle = (e) => {
      this.calculateSchedule();
      e.stopPropagation();
      e.preventDefault();
    };
    if (divisor)
      divisor.addEventListener("focusout", handle);
    if (start)
      start.addEventListener("focusout", handle);
    if (end)
      end.addEventListener("focusout", handle);
  }
  submitSubscription(e) {
    const subscription = {
      number: e.detail.number,
      items: this.items.length > 0 ? this.items : index$3.dist.parse(e.detail.price, "price", this.currency),
      currency: this.currency,
      schedule: {
        frequency: this.frequency,
        divisor: e.detail.divisor ? index$4.Schedule.extractDivisor(e.detail.divisor) : undefined,
        offset: this.offset ? index$4.Schedule.extractOffset(this.offset, this.frequency) : undefined,
      },
      start: index$5.dist.Date.is(e.detail.start) ? e.detail.start : undefined,
      end: index$5.dist.Date.is(e.detail.end) ? e.detail.end : undefined,
    };
    const idArray = Object.keys(this.accounts);
    this.notice.emit(index$6.Notice.execute(this.t("Creating subscription..."), async () => {
      let result;
      const response = await Promise.all(idArray.map(id => index$4.Connection.post(`account/${id}/subscription`, subscription)));
      const [succeeded, failed] = response.reduce(([s, f], e) => (index$7.dist.Error.is(e) ? [s, ++f] : [++s, f]), [0, 0]);
      if (succeeded > 0)
        result = [
          true,
          idArray.length > 1
            ? this.t("$0 of $1 subscriptions were created.", succeeded, idArray.length)
            : this.t("Subscription was created."),
        ];
      else
        result = [
          false,
          idArray.length > 1
            ? this.t("Failed to create $0 of $1 subscriptions.", failed, idArray.length)
            : this.t("Failed to create subscription."),
        ];
      return result;
    }));
  }
  calculateSchedule() {
    let divisor, endDate, startDate;
    if (this.advanced) {
      const divisorInput = document.getElementById("divisor");
      divisor = hasValue(divisorInput) ? divisorInput.value : undefined;
    }
    if (document.getElementById("start") && document.getElementById("end")) {
      const start = document.getElementById("start");
      startDate = hasValue(start) && index$5.dist.DateTime.localize(start.value) ? start.value : index$5.dist.DateTime.now();
      const end = document.getElementById("end");
      endDate = hasValue(end) ? index$5.dist.DateTime.localize(end.value) : undefined;
    }
    this.schedule = {
      frequency: this.frequency,
      divisor: divisor ? index$4.Schedule.extractDivisor(divisor) : undefined,
      offset: this.offset ? index$4.Schedule.extractOffset(this.offset, this.frequency) : undefined,
    };
    this.dueDates = index$4.Schedule.calculateDueDates(this.schedule, 5, startDate, endDate);
  }
  onSelectionChanged(e) {
    if (e.detail.identifier == "frequency") {
      this.frequency = e.detail.value;
      this.calculateSchedule();
    }
    if (e.detail.identifier == "currency")
      this.currency = e.detail.value;
  }
  deleteItem(e) {
    const items = [];
    this.price = (Number(this.price) - index$4.Item.amount(this.items[e.detail.index])).toFixed(2);
    for (let i = 0; i < this.items.length; i++)
      if (i != e.detail.index)
        items.push(this.items[i]);
    this.items = items;
  }
  changeItem(e) {
    e.preventDefault();
    e.stopPropagation();
    this.items[this.items.length - 1] = e.detail;
    this.price = index$4.Item.amount(this.items).toFixed(2);
  }
  changeOffset(e) {
    e.preventDefault();
    e.stopPropagation();
    this.offset = e.detail;
    this.calculateSchedule();
  }
  addItem(e) {
    e.preventDefault();
    e.stopPropagation();
    this.items = [...this.items, {}];
    this.price = index$4.Item.amount(this.items).toFixed(2);
    this.itemCount++;
    this.itemsVisible = true;
  }
  render() {
    return [
      index$1.h("form", null, index$1.h("section", null, index$1.h("smoothly-input", { type: "text", name: "number", value: this.subscriptionNumber }, this.t("Subscription number")), index$1.h("payfunc-total-amount", { price: this.price, itemsvisible: this.itemCount > 1, onAddItem: e => this.addItem(e) }), index$1.h("smoothly-select", { identifier: "frequency", background: "transparent" }, index$4.Schedule.frequencies.map(option => this.frequency == option ? (index$1.h("option", { value: option, selected: true }, this.t(option))) : (index$1.h("option", { value: option }, this.t(option))))), index$1.h("smoothly-trigger", null, index$1.h("smoothly-icon", { toolTip: this.t("Advanced"), onClick: () => (this.advanced = !this.advanced), name: "arrow-forward-circle-outline", fill: "clear", size: "small", color: "medium", class: this.advanced ? "opened" : "" })), index$1.h("smoothly-submit", { color: "primary", fill: "clear", prevent: true, onSubmit: (e) => this.submitSubscription(e) }, index$1.h("smoothly-icon", { toolTip: this.t("Create subscription"), name: "add-circle", fill: "clear", size: "medium", color: "success" }))), this.advanced
        ? [
          index$1.h("section", null, index$1.h("payfunc-select-offset", { frequency: this.frequency, onOffsetChanged: e => this.changeOffset(e) }), index$1.h("smoothly-input", { type: "divisor", id: "divisor", name: "divisor", value: "0 / 1" }, this.t("Divisor"))),
        ]
        : [], index$1.h("main", null, index$1.h("content", null, index$1.h("section", null, index$1.h("smoothly-input", { type: "date", name: "start", id: "start", value: index$5.dist.DateTime.localize(index$5.dist.DateTime.parse(index$5.dist.DateTime.now())).slice(0, 10) }, this.t("Start date")), index$1.h("smoothly-input", { type: "date", name: "end", id: "end" }, this.t("End date"))), index$1.h("payfunc-item-list", { items: this.items.slice(0, this.items.length - 1), currency: this.currency }), this.itemsVisible ? index$1.h("payfunc-item-input", { key: this.itemCount, item: {} }) : []), index$1.h("payfunc-future-due-dates", { dates: this.dueDates }))),
    ];
  }
  get element() { return index$1.getElement(this); }
};
function hasValue(element) {
  return typeof element.value === "string";
}
PayfuncSubscriptionCreate.style = styleCss;

exports.payfunc_subscription_create = PayfuncSubscriptionCreate;
