import { h, Host } from "@stencil/core";
/**
 * Display a dialog that allows the user to specify a signature image, either by using a signature-font-generated image
 * based on their full name, or by hand-drawing their signature with a mouse or tablet.
 */
export class VerdocsSignatureDialog {
    constructor() {
        /**
         * Initial signature text
         */
        this.name = '';
        this.fontLoaded = false;
        this.enteredName = '';
        this.mode = 'type';
    }
    componentWillLoad() {
        this.enteredName = this.name;
        const ds = new FontFace('Dancing Script', 'url(https://fonts.gstatic.com/s/dancingscript/v19/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup6hNX6plRP.woff)');
        ds.load().then(font => {
            document.fonts.add(font);
            this.fontLoaded = true;
        });
    }
    componentDidLoad() {
        this.redrawSignature();
    }
    componentDidUpdate() {
        this.redrawSignature();
    }
    redrawSignature() {
        if (!this.canvasElement) {
            return;
        }
        const canvasWidth = this.canvasElement.width;
        const context = this.canvasElement.getContext('2d');
        context.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);
        let fontSize = 100;
        do {
            fontSize -= 2;
            context.font = `${fontSize}px Dancing Script`;
        } while (context.measureText(this.enteredName).width > canvasWidth - 32); // 32px padding each side
        context.textAlign = 'center';
        context.textBaseline = 'middle';
        context.font = `${fontSize}px Dancing Script`;
        context.fillText(this.enteredName, this.canvasElement.width / 2, this.canvasElement.height / 2);
    }
    handleNameChange(e) {
        this.enteredName = e.target.value;
    }
    handleCancel(e) {
        e.stopPropagation();
        e.preventDefault();
        this.exit.emit();
    }
    handleAdopt(e) {
        e.stopPropagation();
        e.preventDefault();
        const data = this.canvasElement.toDataURL('image/png');
        this.next.emit(data);
    }
    /*
    selColor(hex: string) {
      this.color = hex;
      this.animateDraw();
    }
  
    stopDraw() {
      this.paint = false;
      this.adoptedAndSigned = !this.hasSignature();
    }
  
    draw(e) {
      this.paint = true;
      this.addPoints(e, false);
      this.animateDraw();
    }
  
    recordPoints(e) {
      if (this.paint) {
        this.addPoints(e, true);
        this.animateDraw();
      }
    }
  
    animateDraw() {
      this.canvas.clearRect(0, 0, this.canvas.canvas.offsetWidth, this.canvas.canvas.offsetHeight);
  
      this.canvas.strokeStyle = this.color || '#000000';
      this.canvas.lineJoin = 'round';
      this.canvas.lineWidth = 3;
  
      for (let i = 0; i < this.points.length; i++) {
        this.canvas.beginPath();
        if (this.points[i].drag && i) {
          this.canvas.moveTo(this.points[i - 1].x, this.points[i - 1].y);
          // this.canvas.arc(this.points[i - 1].x, this.points[i - 1].y, 2, 0, 2 * Math.PI, false);
        } else {
          this.canvas.moveTo(this.points[i].x - 1, this.points[i].y);
          // this.canvas.arc(this.points[i].x, this.points[i].y, 2, 0, 2 * Math.PI, false);
        }
  
        this.canvas.lineTo(this.points[i].x, this.points[i].y);
        this.canvas.closePath();
        this.canvas.stroke();
      }
    }
  
    drawCurve(color: string, curve: number) {
      this.canvas.beginPath();
    }
  
  
  
    addPoints(e, drag: boolean) {
      if (window) {
        let x;
        let y;
        e.preventDefault();
        if (e.touches && e.touches.length > 0) {
          x = e.touches[0].clientX;
        } else {
          x = e.clientX;
        }
  
        if (e.touches && e.touches.length > 0) {
          y = e.touches[0].clientY;
        } else {
          y = e.clientY;
        }
        const rect = this.signatureCanvas.nativeElement.getBoundingClientRect();
        this.points.push({
          x: x - rect.left,
          y: y - rect.top,
          drag: drag
        });
      }
    }
  
    clearPad() {
      this.canvas.clearRect(0, 0, this.canvas.canvas.offsetWidth, this.canvas.canvas.offsetHeight);
      this.points = [];
      this.adoptedAndSigned = !this.hasSignature();
    }
  
      async adoptAndSign() {
      try {
        this.adoptedAndSigned = true;
        await this.updateFullName();
        await this.captureSignatureFromCanvas();
        const message = this.signatureMode === 'Signature' ? 'Saving Signature' : 'Saving Initial';
        this.snackbarService.open(message, 'OK', this.snackbarService.initConfig(null, 'bottom'));
        this.handleMode();
      } catch (err) {
        this.snackbarService.open('Failed to apply signature', 'OK', this.snackbarService.initConfig(null, 'bottom'));
      }
    }
  
    handleMode() {
      let currentField;
      switch (this.mode) {
        case 'signerview':
          if (this.signatureMode === 'Signature') {
            this.signatureService.postSignatureBlob().then(result => {
              if (result && result.id && result.url) {
                currentField = this.signatureService.currField;
                this.signatureService.updateSigned(currentField.fName, true);
                this.signatureService.toggleSig(false);
                this.signatureService.setSignatureId(result.id);
                this.signatureService.putSignatureField(this.envelopeId, this.fieldName, result.id).then(res => {
                  this.eventTracker.createEvent({
                    category: 'verdoc',
                    action: 'verdoc signed',
                    label: `verdoc id: ${this.envelopeId}`
                  })
                  if (res && res.settings) {
                    this.signatureService.setSignatureData(res.settings.base64);
                    this.signatureService.setSignatureId(res.settings.signature_id);
                  }
                  this.snackbarService.dismiss();
                  this.dialog.close({ status: 'saved', temp_sig: res.settings.base64, sig_id: res.settings.signature_id });
                }).catch(err => {
                  this.snackbarService.open('Failed to save signature. Please try again.', 'DISMISS', {
                    duration: 3000
                  });
                  this.adoptedAndSigned = false;
                  return err;
                });
              }
            });
          } else {
            this.signatureService.postInitialBlob().then(result => {
              if (result && result.id && result.url) {
                currentField = this.signatureService.currField;
                this.signatureService.updateInitialed(currentField.fName, true);
                this.signatureService.setInitialId(result.id);
                this.signatureService.toggleSig(false);
                this.signatureService.putInitialField(this.envelopeId, this.fieldName, result.id).then(res => {
                  if (res && res.settings) {
                    this.signatureService.setInitialData(res.settings.base64);
                    this.signatureService.setInitialId(res.settings.initial_id);
                  }
                  this.snackbarService.dismiss();
                  this.dialog.close({ status: 'saved', temp_int: res.settings.base64, int_id: res.settings.initial_id });
                }).catch(err => {
                  this.snackbarService.open('Failed to save initial. Please try again.', 'DISMISS', {
                    duration: 3000
                  });
                  this.adoptedAndSigned = false;
                  return err;
                });
              }
            });
          }
          break;
      }
    }
     */
    render() {
        return (h(Host, { key: 'dea4d21238c781bda1f5fdaec35b51e798a8f073', onClick: e => this.handleCancel(e) }, h("div", { key: '2cc79e7a89ce233347bd2cfc46441106a2d02728', class: "dialog" }, h("div", { key: '983646ce131571a60e89d9e5f96479c8473ee888', class: "heading" }, "Create Your Signature"), h("div", { key: '7909c75a451b6778ea69d637949e29b83e3e3b12', class: "content" }, h("verdocs-text-input", { key: 'fd2b5b6a259aab0636bcda106175d225712a05e8', placeholder: "Full Name...", label: "Full Name", value: this.enteredName, onInput: e => this.handleNameChange(e), onClick: e => e.stopPropagation() }), h("div", { key: '7c3795b469571dd019e9a8a79c7110b647795147', class: "as-shown" }, "As shown on driver's license or govt. ID card."), this.fontLoaded ? h("canvas", { ref: el => (this.canvasElement = el) }) : h("div", { style: { display: 'none' } }), h("div", { key: 'ddc7ccd402ba1023e7ffbc5c1a94208149563d32', class: "disclaimer" }, "By clicking Adopt, I agree that the signature will be the electronic representation of my signature for all purposes when I (or my agent) use them on documents, including legally binding contracts \u2014 just the same as a pen-and-paper signature or initial."), h("div", { key: '74dc260aee414296796d156f3dea10919eca6da3', class: "buttons" }, h("verdocs-button", { key: '24747ae1cc4d47a640fc509c9b3c66e06fff0eb8', label: "CANCEL", size: "normal", variant: "outline", onClick: e => this.handleCancel(e) }), h("verdocs-button", { key: 'b845f87b51e1998d69ce579693b871536b316230', label: "Adopt & Sign", size: "normal", onClick: e => this.handleAdopt(e) }))))));
    }
    static get is() { return "verdocs-signature-dialog"; }
    static get originalStyleUrls() {
        return {
            "$": ["verdocs-signature-dialog.scss"]
        };
    }
    static get styleUrls() {
        return {
            "$": ["verdocs-signature-dialog.css"]
        };
    }
    static get properties() {
        return {
            "name": {
                "type": "string",
                "attribute": "name",
                "mutable": false,
                "complexType": {
                    "original": "string",
                    "resolved": "string",
                    "references": {}
                },
                "required": false,
                "optional": false,
                "docs": {
                    "tags": [],
                    "text": "Initial signature text"
                },
                "getter": false,
                "setter": false,
                "reflect": false,
                "defaultValue": "''"
            }
        };
    }
    static get states() {
        return {
            "fontLoaded": {},
            "enteredName": {},
            "mode": {}
        };
    }
    static get events() {
        return [{
                "method": "next",
                "name": "next",
                "bubbles": true,
                "cancelable": true,
                "composed": true,
                "docs": {
                    "tags": [],
                    "text": "Fired when the user completes the dialog and clicks Adopt. The event detail will contain a base64-encoded string\nrepresentation of the signature adopted."
                },
                "complexType": {
                    "original": "string",
                    "resolved": "string",
                    "references": {}
                }
            }, {
                "method": "exit",
                "name": "exit",
                "bubbles": true,
                "cancelable": true,
                "composed": true,
                "docs": {
                    "tags": [],
                    "text": "Event fired when the step is cancelled. This is called exit to avoid conflicts with the JS-reserved \"cancel\" event name."
                },
                "complexType": {
                    "original": "any",
                    "resolved": "any",
                    "references": {}
                }
            }];
    }
}
//# sourceMappingURL=verdocs-signature-dialog.js.map
