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

import java.util.Calendar;

import com.dlsc.flexgantt.model.ITimeSpan;
import com.dlsc.flexgantt.model.TimeSpan;
import com.dlsc.flexgantt.model.dateline.TimeGranularity;
import com.dlsc.flexgantt.model.gantt.DefaultGanttChartModel;
import com.dlsc.flexgantt.model.gantt.DefaultGanttChartNode;
import com.dlsc.flexgantt.model.gantt.ILayer.Feature;
import com.dlsc.flexgantt.model.gantt.ITimelineObject;
import com.dlsc.flexgantt.model.gantt.Layer;
import com.dlsc.flexgantt.model.gantt.Spreadsheet;

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

    private Layer layer;
    private final int ROW_COUNT = 20;
    private DefaultGanttChartNode[] node;
    public Spreadsheet spreadsheet1;
    public Spreadsheet spreadsheet2;
    public Spreadsheet spreadsheet3;

    public SpreadsheetGanttChartModel() {
        super(new DefaultGanttChartNode<String, ITimelineObject>());

        layer = new Layer("Layer");
        layer.removeFeature(Feature.TIMELINE_OBJECT_DESCRIPTIONS);
        addLayer(layer);

        spreadsheet1 = new Spreadsheet("Integer Spreadsheet",
                TimeGranularity.DAY_SHORT, 50, Integer.class);
        addSpreadsheet(spreadsheet1);
        spreadsheet2 = new Spreadsheet("String Spreadsheet",
                TimeGranularity.MONTH_SHORT, 40, String.class);
        addSpreadsheet(spreadsheet2);
        spreadsheet3 = new Spreadsheet("Enum Spreadsheet",
                TimeGranularity.DAY_SHORT, 30, SpreadsheetValues.class);
        addSpreadsheet(spreadsheet3);

        DefaultGanttChartNode<String, ITimelineObject> rootNode = getRoot();
        node = new DefaultGanttChartNode[ROW_COUNT];
        for (int i = 0; i < ROW_COUNT; i++) {
            node[i] = new DefaultGanttChartNode<String, ITimelineObject>(true);
            node[i].setKey("Node " + i);
            node[i].setColumnValue("Test", 0);
            node[i].setValueEditable(0, true);
            rootNode.add(node[i]);
            for (int j = 0; j < 3; j++) {
                DefaultGanttChartNode subNode = new DefaultGanttChartNode<String, ITimelineObject>(
                        false);
                subNode.setKey("Sub Node " + j);
                node[i].add(subNode);

                Calendar c1 = Calendar.getInstance();
                for (int day = 0; day < 300; day++) {
                    Calendar c2 = (Calendar) c1.clone();
                    TimeGranularity.DAY_SHORT.adjustCalendar(c1);
                    TimeGranularity.DAY_SHORT.adjustCalendar(c2);
                    TimeGranularity.DAY_SHORT.increment(c2);

                    ITimeSpan span = new TimeSpan(c1, c2);

                    SpreadsheetValues sv = SpreadsheetValues.TEN;
                    if (Math.random() > .9) {
                        sv = SpreadsheetValues.values()[(int) (Math.random() * SpreadsheetValues
                                .values().length)];
                    }

                    subNode.setSpreadsheetValue(spreadsheet3, sv, span);

                    c1.add(Calendar.DAY_OF_YEAR, 1);
                }
            }
        }

    }
}
