import { Component, Element, Event, h, Prop, State } from "@stencil/core";
import { EmailAddresses } from "@payfunc/model";
import * as translation from "./translation";
export class PayfuncEmailAddresses {
  constructor() {
    this.editable = true;
    this.adding = false;
  }
  get types() {
    return EmailAddresses.types.filter(type => EmailAddresses.is(this.value) ? !this.value[type] : this.value ? type != "primary" : type);
  }
  get emailAddresses() {
    return EmailAddresses.is(this.value) ? Object.assign({}, this.value) : { primary: this.value };
  }
  componentWillLoad() {
    this.t = translation.create(this.element);
  }
  onEdit(e) {
    const type = e.detail.type;
    delete e.detail.type;
    let result;
    if (!EmailAddresses.is(this.value))
      result = e.detail.value;
    else {
      result = Object.assign({}, this.value);
      result[type] = e.detail.value;
    }
    this.changed.emit((this.value = result));
  }
  onDelete(e) {
    const type = e.detail;
    const result = Object.assign({}, this.emailAddresses);
    delete result[type];
    this.changed.emit((this.value = result));
  }
  onAdd(e) {
    const type = e.detail.type;
    const value = e.detail.value;
    const result = this.emailAddresses;
    result[type] = value;
    this.changed.emit((this.value = result));
    this.adding = false;
  }
  render() {
    return [
      this.adding ? (h("payfunc-email-input", { onEdit: () => (this.adding = false), types: this.types, mode: "add", onAdd: (e) => this.onAdd(e) })) : ([]),
      this.editable && this.types.length > 0 ? (h("smoothly-icon", { name: "add-circle", toolTip: this.t("Add"), fill: "clear", size: "medium", color: "success", style: this.adding ? { display: "none" } : {}, onClick: () => (this.adding = true) })) : ([]),
      EmailAddresses.is(this.value) ? (EmailAddresses.map(this.value, (type, value) => [
        h("payfunc-email-address", { value: value, type: type, editable: this.editable, onEdit: (e) => this.onEdit(e), onDelete: (e) => this.onDelete(e) }),
      ])) : this.value ? (h("payfunc-email-address", { value: this.value, editable: this.editable, onEdit: (e) => this.onEdit(e), onDelete: (e) => this.onDelete(e) })) : ([]),
    ];
  }
  static get is() { return "payfunc-email-addresses"; }
  static get encapsulation() { return "scoped"; }
  static get originalStyleUrls() { return {
    "$": ["style.css"]
  }; }
  static get styleUrls() { return {
    "$": ["style.css"]
  }; }
  static get properties() { return {
    "value": {
      "type": "string",
      "mutable": true,
      "complexType": {
        "original": "string | EmailAddresses",
        "resolved": "EmailAddresses | string",
        "references": {
          "EmailAddresses": {
            "location": "import",
            "path": "@payfunc/model"
          }
        }
      },
      "required": false,
      "optional": false,
      "docs": {
        "tags": [],
        "text": ""
      },
      "attribute": "value",
      "reflect": false
    },
    "editable": {
      "type": "boolean",
      "mutable": false,
      "complexType": {
        "original": "boolean",
        "resolved": "boolean",
        "references": {}
      },
      "required": false,
      "optional": false,
      "docs": {
        "tags": [],
        "text": ""
      },
      "attribute": "editable",
      "reflect": false,
      "defaultValue": "true"
    }
  }; }
  static get states() { return {
    "adding": {},
    "t": {}
  }; }
  static get events() { return [{
      "method": "changed",
      "name": "changed",
      "bubbles": true,
      "cancelable": true,
      "composed": true,
      "docs": {
        "tags": [],
        "text": ""
      },
      "complexType": {
        "original": "string | EmailAddresses",
        "resolved": "EmailAddresses | string",
        "references": {
          "EmailAddresses": {
            "location": "import",
            "path": "@payfunc/model"
          }
        }
      }
    }]; }
  static get elementRef() { return "element"; }
}
