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

import java.awt.dnd.DnDConstants;
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 CommandsModel
        extends
        DefaultGanttChartModel<DefaultGanttChartNode<String, ITimelineObject>, ITimelineObject> {
    @SuppressWarnings("unchecked")
    public CommandsModel() {
        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(DnDConstants.ACTION_NONE,
                false, false, "node: no, start: no, duration: no"));
        node[5].addTimelineObject(layer, createTLO(DnDConstants.ACTION_NONE,
                false, true, "node: no, start: no, duration: yes"));
        node[7].addTimelineObject(layer, createTLO(DnDConstants.ACTION_NONE,
                true, false, "node: no, start: yes, duration: no"));
        node[9].addTimelineObject(layer, createTLO(
                DnDConstants.ACTION_COPY_OR_MOVE, false, false,
                "node: yes, start: no, duration: no"));
        node[11].addTimelineObject(layer, createTLO(DnDConstants.ACTION_NONE,
                true, true, "node: no, start: yes, duration: yes"));
        node[13].addTimelineObject(layer, createTLO(
                DnDConstants.ACTION_COPY_OR_MOVE, true, false,
                "node: yes, start: yes, duration: no"));
        node[15].addTimelineObject(layer, createTLO(
                DnDConstants.ACTION_COPY_OR_MOVE, false, true,
                "node: yes, start: no, duration: yes"));
        node[17].addTimelineObject(layer, createTLO(
                DnDConstants.ACTION_COPY_OR_MOVE, true, true,
                "node: yes, start: yes, duration: yes"));
    }

    private DefaultTimelineObject createTLO(int drag, boolean move,
            boolean change, String desc) {
        DefaultActivityObject<?> tlo = new DefaultActivityObject();
        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.setDragActions(drag);
        tlo.setStartTimeChangeable(move);
        tlo.setDurationChangeable(change);
        tlo.setLabel(desc, LabelType.DESCRIPTION);
        return tlo;
    }
}
