package org.orienteer.architect.event;

import org.apache.http.util.Args;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.model.IModel;
import org.danekja.java.util.function.serializable.SerializableFunction;

import java.util.function.Function;

/**
 * Event which represents open modal window
 */
public class OpenModalWindowEvent extends AbstractModalWindowEvent {

    private final IModel<String> titleModel;
    private final Function<String, Component> contentGenerator;

    public OpenModalWindowEvent(AjaxRequestTarget target,
                                IModel<String> titleModel,
                                SerializableFunction<String, Component> contentGenerator
    ) {
        super(target);
        Args.notNull(titleModel, "titleModel");
        Args.notNull(contentGenerator, "contentGenerator");
        this.titleModel = titleModel;
        this.contentGenerator = contentGenerator;
    }

    @Override
    public void execute(ModalWindow modalWindow) {
        modalWindow.setContent(contentGenerator.apply(modalWindow.getContentId()));
        modalWindow.setTitle(titleModel);
        modalWindow.show(target);
    }
}