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

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
import de.swm.commons.mobile.client.widgets.HeaderPanel;
import de.swm.commons.mobile.client.widgets.Slide;
import de.swm.commons.mobile.client.widgets.SlidePanel;
import de.swm.commons.mobile.client.widgets.SlidePanel.SlideProvider;
import de.swm.gwt.client.mobile.Direction;
import de.swm.mobile.kitchensink.client.Application;
import de.swm.mobile.kitchensink.client.base.ShowcaseDetailPage;

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

@ShowcaseSource
@ShowcaseUiXML({"SlidePanelPage.ui.xml"})
public class SlidePanelPage extends ShowcaseDetailPage implements SlideProvider {

    @UiField
	HeaderPanel header;
    @UiField
    SlidePanel slider;

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


    interface SlidePanelPageUiBinder extends UiBinder<Widget, SlidePanelPage> {
    }

    public SlidePanelPage() {
        super(SlidePanelPage.class);
        initWidget(uiBinder.createAndBindUi(this));
        Application.addDefaultBackButtonHanlder(header);

        slider.setSlideCount(10);
        slider.setSlideProvider(this);

        header.setLeftButtonClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                if (slider.getCurrentSlideIndex() > 0) {
                    slider.previous();
                } else {
                    goTo(null, Direction.RIGHT);
                }
            }
        });

        header.setRightButtonClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                slider.next();
            }
        });
    }

    @Override
    public Slide loadSlide(int index) {
        if (index < 2) {
            return null;
        }
        Slide slide = new Slide();
        slide.addStyleName("Slide-Content");
        slide.add(new HTML("Slide Me!"));
        slide.add(new HTML("Dynamic Slide " + index));
        return slide;
    }

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

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

}