using System.Collections.Generic;
using System.Drawing;
using BuildAnalyzer.Analyzer;
using BuildAnalyzer.Svg;

namespace BuildAnalyzer.Render
{
    class TaskExecutionRender
    {
        public IEnumerable<TaskExecution> TaskExecutions { get; private set; }
        public IDictionary<string, Color> ColorTable { get; private set; }
        public SvgDocument Document { get; private set; }
        public int Scale { get; private set; }
        public int Height { get; private set; }

        public TaskExecutionRender(SvgDocument document, IEnumerable<TaskExecution> taskExecutions, IDictionary<string, Color> colorTable, int height, int scale)
        {
            Document = document;
            TaskExecutions = taskExecutions;
            ColorTable = colorTable;
            Scale = scale;
            Height = height;
        }
        public void Render(Point point)
        {            
            Render(point, TaskExecutions, 0);
        }

        private void Render(Point point, IEnumerable<TaskExecution> taskExecutions, int depth)
        {
            foreach (TaskExecution taskExecution in taskExecutions)
            {
                Document.DrawRectangle(new Point(point.X + (int)taskExecution.Started.TotalMilliseconds/Scale, point.Y + depth * 10), new Size((int)taskExecution.Duration.TotalMilliseconds/Scale, Height - depth*20 ), DocumentProperties.Rounding, ColorTable[taskExecution.TaskName], Color.Black, 1);
                Render(point, taskExecution.Childs, depth + 1);
            }
        }
    }
}