package de.swm.mobile.kitchensink.client.showcase.panels;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Widget;
import de.swm.commons.mobile.client.utils.Utils;
import de.swm.commons.mobile.client.widgets.*;
import de.swm.commons.mobile.client.widgets.command.CommandDropDown;
import de.swm.commons.mobile.client.widgets.command.CommandItem;
import de.swm.commons.mobile.client.widgets.date.DateStyle;
import de.swm.commons.mobile.client.widgets.popup.SimpleDatePopup;
import de.swm.commons.mobile.client.widgets.popup.SimplePopup;
import de.swm.mobile.kitchensink.client.Application;
import de.swm.mobile.kitchensink.client.base.ShowcaseDetailPage;

import java.util.Date;

import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseSource;
import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseUiXML;

@ShowcaseSource
@ShowcaseUiXML({"CommandPanelPage.ui.xml"})
public class CommandPanelPage extends ShowcaseDetailPage {

    @UiField
	HeaderPanel header;
    @UiField
	CommandItem command1;
    @UiField
    CommandItem command2;
    @UiField
	CommandDropDown commandDropDown;
    @UiField
    CommandItem command21;
    @UiField
    CommandItem command22;
    @UiField
    CommandItem command23;

    private static CommandPanelPageUiBinder uiBinder = GWT.create(CommandPanelPageUiBinder.class);


    interface CommandPanelPageUiBinder extends UiBinder<Widget, CommandPanelPage> {
    }

    public CommandPanelPage() {
        super(CommandPanelPage.class);
        initWidget(uiBinder.createAndBindUi(this));
        Application.addDefaultBackButtonHanlder(header);
        command1.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                Button[] buttons = new Button[5];
                for (int i = 0; i < 5; i++) {
                    buttons[i] = new Button("Option_" + i);
                    if (i > 0) {
                        buttons[i].getElement().getStyle().setMarginTop(0.3, Unit.EM);
                    }
                }
                final SimplePopup popup = new SimplePopup(buttons);
                popup.setAutoHide(true);
                for (int i = 0; i < 5; i++) {
                    final int num = i;
                    buttons[i].addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent event) {
                            Utils.console("Option " + num + " selected");
                            popup.hide();
                        }
                    });
                }
                popup.showRelativeTo(command1);
            }
        });
        command2.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                SimpleDatePopup simpleDateTimePopup = new SimpleDatePopup(new Date(), DateStyle.DATE, new SimpleDatePopup.DateSelectionHandler() {

                    @Override
                    public void dateSelectionCancelled() {
                        // do nothing
                    }

                    @Override
                    public void dateSelected(Date selectedDate) {
                        Utils.console("selected date: " + selectedDate);
                    }
                });
                simpleDateTimePopup.showCentered(true);
            }
        });
        commandDropDown.addValueChangeHandler(new ValueChangeHandler<String>() {

            @Override
            public void onValueChange(ValueChangeEvent<String> event) {
                Utils.console("selected item: " + event.getValue());
            }

        });

        command21.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                Button[] buttons = new Button[5];
                for (int i = 0; i < 5; i++) {
                    buttons[i] = new Button("Option_" + i);
                    if (i > 0) {
                        buttons[i].getElement().getStyle().setMarginTop(0.3, Unit.EM);
                    }
                }
                final SimplePopup popup = new SimplePopup(buttons);
                popup.setAutoHide(true);
                for (int i = 0; i < 5; i++) {
                    final int num = i;
                    buttons[i].addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent event) {
                            Utils.console("Option " + num + " selected");
                            popup.hide();
                        }
                    });
                }
                popup.showRelativeTo(command21);
            }
        });
        command22.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                Window.alert("Command 2 clicked");
            }
        });
        command23.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                Window.alert("Command 3 clicked");
            }
        });
    }

    @Override
    public String getName() {
        return "CommandPanel";
    }

    @Override
    public HeaderPanel getHeaderPanel() {
        return header;
    }

}