package de.codeworld.modules.demo.ui;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.vaadin.grid.cellrenderers.editable.TextFieldRenderer;
import org.vaadin.treegrid.TreeGrid;

import com.google.common.collect.Lists;
import com.vaadin.ui.Component;
import com.vaadin.ui.Grid;
import com.vaadin.ui.Notification;

import de.codeworld.modules.demo.DemoView;
import de.codeworld.modules.demo.pojo.StyleTreeData;
import de.codeworld.modules.demo.pojo.StyleTreeRow;
import de.codeworld.vaadin.builder.FluentUI;
import de.codeworld.vaadin.mvp.AbstractMvpModuleView;
import de.codeworld.vaadin.spring.SpringView;

@SpringView
public class DemoViewImpl extends AbstractMvpModuleView<DemoView.Observer, Component> implements DemoView {

        private static final long serialVersionUID = -6582255873288617956L;

        public static final String DEACTIVATED = "deactivated";
        public static final String LAST_MODIFIED = "lastModified";
        public static final String STATUS = "status";
        public static final String NUMBER = "number";
        private Long counter = 1L;

        @Override
        protected void initializeUI() {

                final TreeGrid grid = new TreeGrid();
                grid.setSizeFull();
                grid.setSelectionMode(Grid.SelectionMode.SINGLE);

                createTestData();

                final DemoFirstContainer mainContainer = new DemoFirstContainer();
                mainContainer.setItems(this.items);
                grid.setContainerDataSource(mainContainer);

                final TextFieldRenderer<String> textFieldRenderer = new TextFieldRenderer<>();
                textFieldRenderer.addItemEditListener(e -> {
                        Notification.show(e.getNewValue().toString());
                });

                grid.getColumn(DemoFirstContainer.STATUS).setRenderer(textFieldRenderer);
                grid.setHierarchyColumn(DemoFirstContainer.NUMBER);
                grid.setColumnReorderingAllowed(true);

                setCompositionRoot(FluentUI.vertical().add(grid).sizeFull().margin().get());

        }

        private final List<StyleTreeData> items = new ArrayList<>();

        public void createTestData() {
                final StyleTreeRow parent = StyleTreeRow.builder().id(this.counter++).number("S001")
                                .lastModified(new Date()).status("STYLE_CREATED").deactivated(true).build();

                final StyleTreeRow child1 = StyleTreeRow.builder().id(this.counter++).number("I001")
                                .lastModified(new Date()).status("ITEM_CREATED").deactivated(true).build();

                final StyleTreeRow child2 = StyleTreeRow.builder().id(this.counter++).number("I002")
                                .lastModified(new Date()).status("ITEM_OK").deactivated(true).build();

                this.items.add(StyleTreeData.builder().id(this.counter++).treeRow(parent)
                                .childrens(Lists.newArrayList(child1, child2)).build());
        }
}
