package org.aegee.runanddine.pathfinder;

import java.util.List;

import org.aegee.runanddine.BasePage;
import org.aegee.runanddine.RunAndDineApplication;
import org.aegee.runanddine.runanddine.RunAndDine;
import org.aegee.runanddine.status.RunAndDineStatus;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.HiddenField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.request.resource.ResourceReference;

/**
 * The optimization needs to know which groups are preparing a main course.This
 * page should enable the organizer to do so.
 *
 * @author adrian
 */
public class MainCourseSelector extends BasePage {

    public MainCourseSelector(RunAndDine event) {
        this(new PageParameters().add("id", event.getId()));
    }

    public MainCourseSelector(final PageParameters parameters) {
        super(parameters);

        final int id = parameters.get("id").toInt();
        add(new Behavior() {

            private final ResourceReference MCSJS = new JavaScriptResourceReference(MainCourseSelector.class, "MainCourseSelector.js");

            @Override
            public void renderHead(Component component, IHeaderResponse response) {
                response.renderJavaScriptReference(MCSJS);
                response.renderJavaScriptReference("http://maps.googleapis.com/maps/api/js?key="+RunAndDineApplication.GOOGLE_KEY+"&sensor=false");
            }
        });
        
        final List<OptGroup> groups = OptGroup.OBJECTS.getAllByRunAndDineId(id);
        Form form = new Form("form") {

            @Override
            protected void onSubmit() {
                for (OptGroup group : groups) {
                    OptGroup.OBJECTS.save(group);
                }

                RunAndDineStatus.setStatusInformation(id, MainCourseSelector.class, "Kitchens selected.");
                setResponsePage(new DistanceMatrixPage(parameters));
            }
        };

        ListView<OptGroup> list = new ListView<OptGroup>("list", groups) {

            @Override
            protected void populateItem(ListItem<OptGroup> item) {
                WebMarkupContainer container = new WebMarkupContainer("container");
                OptGroup group = item.getModelObject();
                if (group.getCourse() == 1) {
                    container.add(new AttributeAppender("class", " selected"));
                }
                container.add(new HiddenField<Integer>("key", new Model<Integer>(item.getIndex())).setOutputMarkupId(true));
                container.add(new HiddenField("id", new PropertyModel(group, "id")));
                container.add(new Label("names", new PropertyModel(group, "names")));
                container.add(new Label("kitchen", new PropertyModel(group, "kitchen")));
                container.add(new HiddenField("course", new PropertyModel(group, "course")));
                container.add(new HiddenField("address", new PropertyModel(group, "address")));
                item.add(container);
            }
        };

        form.add(list);
        add(form);
    }
}
