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

import java.util.Calendar;

import com.dlsc.flexgantt.model.TimeSpan;
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.GanttChartModelEvent;
import com.dlsc.flexgantt.model.gantt.ITimelineObject;
import com.dlsc.flexgantt.model.gantt.Layer;

public class MultiLineModel
        extends
        DefaultGanttChartModel<DefaultGanttChartNode<String, ITimelineObject>, ITimelineObject> {
    private static final Layer LAYER = new Layer("Default");

    private MyNode node;

    @SuppressWarnings("unchecked")
    public MultiLineModel() {
        super(new DefaultGanttChartNode(true));

        addLayer(LAYER);

        DefaultGanttChartNode rootNode = getRoot();
        rootNode.add(node = new MyNode());
        node.setKey("Multiline Node");
        node.setRowHeight(200);
        node.setLineCount(5);
        node.setColumnValue(5, 1);
        test();
    }

    public DefaultGanttChartNode getNode() {
        return node;
    }

    public void clear() {
        node.clearTimelineObjects(LAYER);
        clearRelationships();
        fireGanttChartChanged(new GanttChartModelEvent(this,
                GanttChartModelEvent.ID.TIMELINE_OBJECTS_REMOVED));
    }

    public void test() {
        clear();
        int lineCount = node.getLineCount();
        for (int i = 0; i < lineCount * 3; i++) {
            Calendar s = Calendar.getInstance();
            Calendar e = Calendar.getInstance();
            s.add(Calendar.DAY_OF_YEAR, (int) (Math.random() * 100));
            e.setTimeInMillis(s.getTimeInMillis());
            e
                    .add(Calendar.DAY_OF_YEAR, Math.max(1,
                            (int) (Math.random() * 10)));
            DefaultTimelineObject tlo = new DefaultTimelineObject(new TimeSpan(
                    s, e));
            tlo.setLineIndex((int) (Math.random() * lineCount));
            node.addTimelineObject(LAYER, tlo);
        }
    }

    class MyNode extends DefaultGanttChartNode<Object, ITimelineObject> {

        public MyNode() {
            super(false);
        }

        @Override
        public int getLineHeight(int lineIndex, int rowHeight) {
            return super.getLineHeight(lineIndex, rowHeight);
        }

        @Override
        public int getLineLocation(int lineIndex, int rowHeight) {
            return super.getLineLocation(lineIndex, rowHeight);
        }
    }
}
