import { app } from "../../scripts/app.js";
import { RgthreeBaseServerNode } from "./base_node.js";
import { NodeTypesString } from "./constants.js";
class ImageInsetCrop extends RgthreeBaseServerNode {
    constructor(title = ImageInsetCrop.title) {
        super(title);
    }
    onAdded(graph) {
        const measurementWidget = this.widgets[0];
        let callback = measurementWidget.callback;
        measurementWidget.callback = (...args) => {
            this.setWidgetStep();
            callback && callback.apply(measurementWidget, [...args]);
        };
        this.setWidgetStep();
    }
    configure(info) {
        super.configure(info);
        this.setWidgetStep();
    }
    setWidgetStep() {
        const measurementWidget = this.widgets[0];
        for (let i = 1; i <= 4; i++) {
            if (measurementWidget.value === "Pixels") {
                this.widgets[i].options.step = 80;
                this.widgets[i].options.max = ImageInsetCrop.maxResolution;
            }
            else {
                this.widgets[i].options.step = 10;
                this.widgets[i].options.max = 99;
            }
        }
    }
    async handleAction(action) {
        if (action === "Reset Crop") {
            for (const widget of this.widgets) {
                if (["left", "right", "top", "bottom"].includes(widget.name)) {
                    widget.value = 0;
                }
            }
        }
    }
    static setUp(comfyClass, nodeData) {
        RgthreeBaseServerNode.registerForOverride(comfyClass, nodeData, ImageInsetCrop);
    }
}
ImageInsetCrop.title = NodeTypesString.IMAGE_INSET_CROP;
ImageInsetCrop.type = NodeTypesString.IMAGE_INSET_CROP;
ImageInsetCrop.comfyClass = NodeTypesString.IMAGE_INSET_CROP;
ImageInsetCrop.exposedActions = ["Reset Crop"];
ImageInsetCrop.maxResolution = 8192;
app.registerExtension({
    name: "rgthree.ImageInsetCrop",
    async beforeRegisterNodeDef(nodeType, nodeData, _app) {
        if (nodeData.name === NodeTypesString.IMAGE_INSET_CROP) {
            ImageInsetCrop.setUp(nodeType, nodeData);
        }
    },
});
