using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Drawing;

using Emgu.CV;
using Emgu.CV.Structure;

namespace bbiwarg.Graphics
{
    class OutputImage
    {
        public Image<Rgb, byte> Image { get; private set; }

        public OutputImage(int width, int height)
        {
            Image = new Image<Rgb, byte>(width, height);
        }

        public Color getColotAt(int x, int y) {
            
            byte red = Image.Data[y, x, 0];
            byte green = Image.Data[y, x, 1];
            byte blue = Image.Data[y, x, 2];
            return Color.FromArgb(red,green,blue);
        }
        
        public void drawLineSegment(bbiwarg.Utility.LineSegment2D lineSegment, Color color, int thickness = 1)
        {
            Image.Draw(new LineSegment2D(lineSegment.P1, lineSegment.P2), new Rgb(color), thickness);
        }

        public void drawContour(Contour<Point> contour, Color color, int thickness = 1)
        {
            Image.Draw(contour, new Rgb(color), thickness);
        }

        public void drawPoints(Seq<Point> points, Color color, int thickness = 1)
        {
            Image.Draw(points, new Rgb(color), thickness);
        }

        public void drawPixel(int x, int y, Color color)
        {
            Image.Data[y, x, 0] = color.R;
            Image.Data[y, x, 1] = color.G;
            Image.Data[y, x, 2] = color.B;
        }

        public void fillCircle(int x, int y, float radius, Color color)
        {
            Image.Draw(new CircleF(new PointF(x, y), radius), new Rgb(color), 0);
        }

        public void drawRectangle(int x, int y, int width, int height, Color color, int thichness = 0)
        {
            Image.Draw(new Rectangle(x, y, width, height), new Rgb(color), thichness);
        }
    }
}
