package com.dlsc.flexgantt.showcase.demo.actions;

import java.util.Calendar;

import com.dlsc.flexgantt.model.TimeSpan;
import com.dlsc.flexgantt.model.gantt.DefaultActivityObject;
import com.dlsc.flexgantt.model.gantt.DefaultGanttChartModel;
import com.dlsc.flexgantt.model.gantt.DefaultGanttChartNode;
import com.dlsc.flexgantt.model.gantt.DefaultTimelineObject;
import com.dlsc.flexgantt.model.gantt.ILayer;
import com.dlsc.flexgantt.model.gantt.ITimelineObject;
import com.dlsc.flexgantt.model.gantt.Layer;
import com.dlsc.flexgantt.util.LabelType;

public class ActionsDemoGanttChartModel
        extends
        DefaultGanttChartModel<DefaultGanttChartNode<String, ITimelineObject>, ITimelineObject> {

    public enum RequestedActions {
        CUT_COPY_PASTE, ALIGNMENT, FONT_STYLE, ALL_ACTIONS;
    }

    public ActionsDemoGanttChartModel() {
        super(new DefaultGanttChartNode<String, ITimelineObject>());
        
        DefaultGanttChartNode<String, ITimelineObject> rootNode = getRoot();
        
        final int ROW_COUNT = 100;
        
        DefaultGanttChartNode[] node = new DefaultGanttChartNode[ROW_COUNT];
        for (int i = 0; i < ROW_COUNT; i++) {
            node[i] = new DefaultGanttChartNode<String, ITimelineObject>(false);
            node[i].setKey("Node " + i);
            rootNode.add(node[i]);
        }
        
        Layer layer = new Layer("Default");
        layer.addFeature(ILayer.Feature.TIMELINE_OBJECT_DESCRIPTIONS);

        addLayer(layer);
        
        node[3].addTimelineObject(layer,
                createTLO(RequestedActions.CUT_COPY_PASTE, "Cut, Copy, Pase"));
        node[7].addTimelineObject(layer,
                createTLO(RequestedActions.ALIGNMENT, "Alignment"));
        node[11].addTimelineObject(layer,
                createTLO(RequestedActions.FONT_STYLE, "Font Styles"));
        node[15].addTimelineObject(layer,
                createTLO(RequestedActions.ALL_ACTIONS, "All Actions"));
    }

    private DefaultTimelineObject createTLO(RequestedActions actions,
            String desc) {
        DefaultActivityObject<RequestedActions> tlo = new DefaultActivityObject<RequestedActions>();
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.add(Calendar.DAY_OF_YEAR, 10);
        c2.add(Calendar.DAY_OF_YEAR, 17);
        tlo.setTimeSpan(new TimeSpan(c1, c2));
        tlo.setLabel(desc, LabelType.DESCRIPTION);
        tlo.setUserObject(actions);
        return tlo;
    }
}
