using System;
using System.Collections.Generic;
using System.Linq;
using Assets.Common;

namespace Assets.Common
{
    public class Bounding
    {
        public readonly Point Min;
        public readonly Point Max;

        public double Width  => Max.x - Min.x;
        public double Height => Max.y - Min.y;

        public Bounding(double x1, double y1, double x2, double y2)
        {
            if (x1 > x2) (x1, x2) = (x2, x1);
            if (y1 > y2) (y1, y2) = (y2, y1);
        
            Min = new Point(x1, y1);
            Max = new Point(x2, y2);
        }
    }

    public static class BoundingTools
    {
        public static Bounding GetBounding(IEnumerable<Point> points)
        {
            var start = points.First();
            double xmin = start.x, xmax = start.x, ymin = start.y, ymax = start.y;

            foreach (var point in points.Skip(1))
            {
                xmin = Math.Min(xmin, point.x);
                ymin = Math.Min(ymin, point.y);
                xmax = Math.Max(xmax, point.x);
                ymax = Math.Max(ymax, point.y);
            }
            
            return new Bounding(xmin, ymin, xmax, ymax);
        }
    }
}