// retoor <retoor@molodetz.nl>

import { Http } from "./Http.js";

export class IssueAttachments {
    constructor() {
        this.active = false;
        document.addEventListener("submit", (event) => {
            const form = event.target.closest("form[data-issue-attach]");
            if (!form) return;
            event.preventDefault();
            this.add(form);
        });
        document.addEventListener("click", (event) => {
            const button = event.target.closest("[data-attachment-delete]");
            if (!button) return;
            event.preventDefault();
            this.remove(button);
        });
    }

    async add(form) {
        if (this.active) return;
        const uidsInput = form.querySelector("[name='attachment_uids']");
        const uids = uidsInput ? uidsInput.value.trim() : "";
        if (!uids) {
            window.app.toast.show("Select a file to attach first", { type: "info" });
            return;
        }
        this.active = true;
        const button = form.querySelector("button[type='submit']");
        if (button) button.disabled = true;
        try {
            await Http.send(form.dataset.action, { attachment_uids: uids });
            window.location.reload();
        } catch (error) {
            this.active = false;
            if (button) button.disabled = false;
        }
    }

    async remove(button) {
        const confirmed = await window.app.dialog.confirm({
            title: "Delete attachment",
            message: "Delete this attachment? It is also removed from the tracker.",
        });
        if (!confirmed) return;
        try {
            await Http.sendDelete(button.dataset.action, { silent: true });
            const item = button.closest(".attachment-gallery-item");
            if (item) item.remove();
        } catch (error) {
            Http.notifyError(error.message || "Could not delete the attachment");
        }
    }
}
