import { h } from "@stencil/core";
import { formatCurrency } from "../../utils/utils";
import { heading4, text } from "../../styles/parts";
import { Skeleton, Button } from "../../ui-components";
import { makeSubmitDisputeResponse } from "./dispute-response/dispute-response-actions";
import { DisputeService } from "../../api/services/dispute.service";
import { DisputeManagementClickActions } from "./event-types";
export class DisputeNotification {
    acceptDispute() {
        makeSubmitDisputeResponse({
            disputeId: this.dispute.id,
            authToken: this.authToken,
            service: new DisputeService()
        })({
            payload: { forfeit: true },
            onSuccess: (response) => {
                this.submitEvent.emit({ response: response });
            },
            onError: ({ error, code, severity }) => {
                this.errorEvent.emit({
                    errorCode: code,
                    message: error,
                    severity,
                });
            },
        });
    }
    initiateRespondToDispute() {
        this.clickEvent.emit({ name: DisputeManagementClickActions.respondToDispute });
    }
    isDueDatePassed() {
        var _a;
        if (!((_a = this.dispute) === null || _a === void 0 ? void 0 : _a.due_date)) {
            return false;
        }
        // Fix for JavaScript Date object parsing
        // https://stackoverflow.com/a/31732581
        const dueDate = new Date(this.dispute.due_date.replace(/-/g, '/').replace(/T.+/, ''));
        const today = new Date();
        // Reset time to compare only dates
        today.setHours(0, 0, 0, 0);
        dueDate.setHours(0, 0, 0, 0);
        return dueDate < today;
    }
    render() {
        var _a, _b, _c, _d, _e, _f, _g, _h, _j;
        return (h("div", { key: '325018c414e82b5c1bc7d9c5aa444b5a9d4e83d6', class: "dispute-notification-root" }, this.isLoading && (h("div", { key: 'deffb8ef248e32962aca084a564e83aa5f222b0a', style: { marginBottom: '8px' } }, h(Skeleton, { key: '6f6c630b3122b1b2fd480470f5df7683f19de612', height: '28px', width: '70%', styles: { marginBottom: '16px' } }), h(Skeleton, { key: '11f46711fed1094496c64551f084351c08f598be', height: '18px', styles: { marginBottom: '8px' } }), h(Skeleton, { key: 'fc7e2eac76e1cbc329147f3da39a8c28c51a7b6a', height: '18px', styles: { marginBottom: '8px' } }))), ((_a = this.dispute) === null || _a === void 0 ? void 0 : _a.needsResponse) && this.isDueDatePassed() && (h("div", { key: '0ef159acf9fe5b12dc0dcddab6b7583e5fc9a799', part: text }, h("h1", { key: 'db263006990c5b4cf178f7f81650ad7602765532', class: "h4", part: heading4 }, "The due date (", (_b = this.dispute) === null || _b === void 0 ? void 0 :
            _b.due_date, ") for this dispute has passed"), h("p", { key: '185c6f952ef46e3aec625cab73c943b3046ef6b4' }, "You can no longer submit evidence to counter this dispute."))), ((_c = this.dispute) === null || _c === void 0 ? void 0 : _c.needsResponse) && !this.isDueDatePassed() && (h("div", { key: 'd4536104addc500277fbde990b7b33ba8ff54c7e', part: text }, h("h1", { key: '198138cc6541c0aeeae458e2de1e3ae0c695328d', class: "h4", part: heading4 }, "This payment is disputed"), h("p", { key: '6902ce5e3e94ab7f71ee6d0c6a7604ef97f0e740' }, "The cardholder is disputing this payment. You may accept this dispute, or proceed to provide evidence in a counter dispute."), h("h2", { key: 'f49d1ac855365480edc61e0af117230e2f3dbe1f', class: "h5" }, "Dispute details"), h("div", { key: 'f3868a098dbc4a613d676b8580c053527f9d5fad', class: "d-table gap-2" }, h("div", { key: '7699bc619b652ffe1c77cf6e5e0dac967679b1e6', class: "d-table-row gap-2" }, h("span", { key: '9de67b45877120f54f724f1efe7b3f4d4b035d30', part: "detail-section-item-title", class: "fw-bold d-table-cell pe-4" }, "Amount"), h("span", { key: 'bfd79f86b5b81daf2a34f5874fcff03a05d1e64d', part: "detail-section-item-data", class: "flex-1 d-table-cell text-wrap" }, formatCurrency((_d = this.dispute) === null || _d === void 0 ? void 0 : _d.amount))), h("div", { key: '0e57d56172859eb5857a1930cb837569157026d9', class: "d-table-row gap-2" }, h("span", { key: '0b615bd8f9a9add7d18d50be4f4f644707576de2', part: "detail-section-item-title", class: "fw-bold d-table-cell pe-4" }, "Reason"), h("span", { key: '46288c67be32fe2d95fea88f5b0148f22552a2c9', part: "detail-section-item-data", class: "flex-1 d-table-cell text-wrap" }, (_e = this.dispute) === null || _e === void 0 ? void 0 : _e.reason)), h("div", { key: 'c68280b0f36280804fb6231236d942174c189456', class: "d-table-row gap-2" }, h("span", { key: 'ed3f145aa0f2c949b80d7033e4ecb818a4a4fa68', part: "detail-section-item-title", class: "fw-bold d-table-cell pe-4" }, "Due Date"), h("span", { key: '4c4530acbc570fb13b5f53947714bd250ff99cab', part: "detail-section-item-data", class: "flex-1 d-table-cell text-wrap" }, (_f = this.dispute) === null || _f === void 0 ? void 0 : _f.due_date))), h("div", { key: '3244bb6bdbed2b4e28c479c2d4db2d0ae152f2f0', class: "d-flex gap-2 mt-4 justify-content-end" }, h(Button, { key: '3716a28cec93e70690ad96bfc0c5f3b7b56f8ecb', variant: "secondary", onClick: () => this.acceptDispute() }, "Accept dispute"), h(Button, { key: '7f326ed6f298c9f1091b160c63e386864329190e', variant: "primary", onClick: () => this.initiateRespondToDispute() }, "Counter dispute")))), ((_g = this.dispute) === null || _g === void 0 ? void 0 : _g.underReview) && (h("div", { key: 'd705ae48c1f30b904ac31bbdbab9e955868f51e1', part: text }, h("h1", { key: '712cebef3699a8c2a97bcb69ae68e0b491090c88', class: "h4", part: heading4 }, "This payment is disputed and under review"), h("p", { key: 'ca95b2c8bdc6083a3fbb1dd63c6bdaa4699ae2a7' }, "The cardholder is disputing this payment. A counter dispute has been submitted and is under review."))), ((_h = this.dispute) === null || _h === void 0 ? void 0 : _h.won) && (h("div", { key: 'c0cb4c8342aa4f022d76e95123a047b7b707f562', part: text }, h("h1", { key: '797966d237d4b46eb1b880deb7fa21746f5b3b1e', class: "h4", part: heading4 }, "This payment was disputed"), h("p", { key: '2f9eed1a5f34f772206112488af22aa8b35c07b6' }, "The cardholder disputed this payment and the card issuer has settled it in your favor."))), ((_j = this.dispute) === null || _j === void 0 ? void 0 : _j.lost) && (h("div", { key: '9a90af51218ed921e27519363995f12e29713bfd', part: text }, h("h1", { key: '736ee5cf8f65d780d4812e24ea9050dcc0d109a4', class: "h4", part: heading4 }, "This payment was disputed"), h("p", { key: '9ca83087b028e1078bcc2cd0b552e8f5379932d1' }, "The cardholder disputed this payment and the card issuer has settled it in their favor.")))));
    }
    static get is() { return "dispute-notification"; }
    static get properties() {
        return {
            "dispute": {
                "type": "unknown",
                "mutable": false,
                "complexType": {
                    "original": "Dispute",
                    "resolved": "Dispute",
                    "references": {
                        "Dispute": {
                            "location": "import",
                            "path": "../../api/Dispute",
                            "id": "src/api/Dispute.ts::Dispute"
                        }
                    }
                },
                "required": true,
                "optional": false,
                "docs": {
                    "tags": [],
                    "text": ""
                },
                "getter": false,
                "setter": false
            },
            "authToken": {
                "type": "string",
                "mutable": false,
                "complexType": {
                    "original": "string",
                    "resolved": "string",
                    "references": {}
                },
                "required": true,
                "optional": false,
                "docs": {
                    "tags": [],
                    "text": ""
                },
                "getter": false,
                "setter": false,
                "reflect": false,
                "attribute": "auth-token"
            },
            "isLoading": {
                "type": "boolean",
                "mutable": false,
                "complexType": {
                    "original": "boolean",
                    "resolved": "boolean",
                    "references": {}
                },
                "required": true,
                "optional": false,
                "docs": {
                    "tags": [],
                    "text": ""
                },
                "getter": false,
                "setter": false,
                "reflect": false,
                "attribute": "is-loading"
            }
        };
    }
    static get events() {
        return [{
                "method": "clickEvent",
                "name": "click-event",
                "bubbles": true,
                "cancelable": true,
                "composed": true,
                "docs": {
                    "tags": [],
                    "text": ""
                },
                "complexType": {
                    "original": "ComponentClickEvent",
                    "resolved": "ComponentClickEvent",
                    "references": {
                        "ComponentClickEvent": {
                            "location": "import",
                            "path": "../../api/ComponentEvents",
                            "id": "src/api/ComponentEvents.ts::ComponentClickEvent"
                        }
                    }
                }
            }, {
                "method": "errorEvent",
                "name": "error-event",
                "bubbles": true,
                "cancelable": true,
                "composed": true,
                "docs": {
                    "tags": [],
                    "text": ""
                },
                "complexType": {
                    "original": "ComponentErrorEvent",
                    "resolved": "ComponentErrorEvent",
                    "references": {
                        "ComponentErrorEvent": {
                            "location": "import",
                            "path": "../../api/ComponentEvents",
                            "id": "src/api/ComponentEvents.ts::ComponentErrorEvent"
                        }
                    }
                }
            }, {
                "method": "submitEvent",
                "name": "submit-event",
                "bubbles": true,
                "cancelable": true,
                "composed": true,
                "docs": {
                    "tags": [],
                    "text": ""
                },
                "complexType": {
                    "original": "ComponentSubmitEvent",
                    "resolved": "ComponentSubmitEvent",
                    "references": {
                        "ComponentSubmitEvent": {
                            "location": "import",
                            "path": "../../api/ComponentEvents",
                            "id": "src/api/ComponentEvents.ts::ComponentSubmitEvent"
                        }
                    }
                }
            }];
    }
}
;
