using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RecrownedAthenaeum.DataTypes
{
    public class NinePatch
    {
        public Color color;
        readonly Texture2D texture;
        readonly int a, b, c, d;
        /// 
        /// A nine patch object.
        /// 
        /// Texture used for the nine patch. Dimensions must be greater than their sum border counter parts.
        /// Left side.
        /// Right side.
        /// Bottom side.
        /// Top side.
        public NinePatch(Texture2D texture, int a, int b, int c, int d)
        {
            this.texture = texture;
            if (a + b >= texture.Width) throw new ArgumentOutOfRangeException("a and b cannot be greater than or equal to the width of texture.");
            if (c + d >= texture.Height) throw new ArgumentOutOfRangeException("c and d cannot be greater or equal to the height of the texture.");
            this.a = a;
            this.b = b;
            this.c = c;
            this.d = d;
            color = Color.White;
        }
        public void Draw(SpriteBatch batch, Rectangle destination)
        {
            Rectangle sourceRectangle;
            Rectangle drawnRectangle;
            //1x1
            drawnRectangle.X = destination.X;
            drawnRectangle.Y = destination.Y;
            drawnRectangle.Width = a;
            drawnRectangle.Height = c;
            sourceRectangle.X = 0;
            sourceRectangle.Y = 0;
            sourceRectangle.Width = a;
            sourceRectangle.Height = c;
            batch.Draw(texture, drawnRectangle, sourceRectangle, color);
            //2x1
            drawnRectangle.X = destination.X + a;
            drawnRectangle.Y = destination.Y;
            drawnRectangle.Width = destination.Width - a - b;
            drawnRectangle.Height = c;
            sourceRectangle.X = a;
            sourceRectangle.Y = 0;
            sourceRectangle.Width = texture.Width - a - b;
            sourceRectangle.Height = c;
            batch.Draw(texture, drawnRectangle, sourceRectangle, color);
            //3x1
            drawnRectangle.X = destination.X + destination.Width - b;
            drawnRectangle.Y = destination.Y;
            drawnRectangle.Width = b;
            drawnRectangle.Height = c;
            sourceRectangle.X = texture.Width - b;
            sourceRectangle.Y = 0;
            sourceRectangle.Width = b;
            sourceRectangle.Height = c;
            batch.Draw(texture, drawnRectangle, sourceRectangle, color);
            //1x2
            drawnRectangle.X = destination.X;
            drawnRectangle.Y = destination.Y + c;
            drawnRectangle.Width = a;
            drawnRectangle.Height = destination.Height - d - c;
            sourceRectangle.X = 0;
            sourceRectangle.Y = c;
            sourceRectangle.Width = a;
            sourceRectangle.Height = texture.Height - c - d;
            batch.Draw(texture, drawnRectangle, sourceRectangle, color);
            //2x2
            drawnRectangle.X = destination.X + a;
            drawnRectangle.Y = destination.Y + c;
            drawnRectangle.Width = destination.Width - a - b;
            drawnRectangle.Height = destination.Height - c - d;
            sourceRectangle.X = a;
            sourceRectangle.Y = c;
            sourceRectangle.Width = texture.Width - a - b;
            sourceRectangle.Height = texture.Height - c - d;
            batch.Draw(texture, drawnRectangle, sourceRectangle, color);
            //3x2
            drawnRectangle.X = destination.X + destination.Width - b;
            drawnRectangle.Y = destination.Y + c;
            drawnRectangle.Width = b;
            drawnRectangle.Height = destination.Height - c - d;
            sourceRectangle.X = texture.Width - b;
            sourceRectangle.Y = c;
            sourceRectangle.Width = b;
            sourceRectangle.Height = texture.Height - c - d;
            batch.Draw(texture, drawnRectangle, sourceRectangle, color);
            //1x3
            drawnRectangle.X = destination.X;
            drawnRectangle.Y = destination.Height - d;
            drawnRectangle.Width = a;
            drawnRectangle.Height = d;
            sourceRectangle.X = a;
            sourceRectangle.Y = texture.Height - d;
            sourceRectangle.Width = a;
            sourceRectangle.Height = d;
            batch.Draw(texture, drawnRectangle, sourceRectangle, color);
            //2x3
            drawnRectangle.X = destination.X + a;
            drawnRectangle.Y = destination.Height - d;
            drawnRectangle.Width = destination.Width - a - b;
            drawnRectangle.Height = d;
            sourceRectangle.X = a;
            sourceRectangle.Y = texture.Height - d;
            sourceRectangle.Width = texture.Width - a - b;
            sourceRectangle.Height = d;
            batch.Draw(texture, drawnRectangle, sourceRectangle, color);
            //3x3
            drawnRectangle.X = destination.X + destination.Width - b;
            drawnRectangle.Y = destination.Height - d;
            drawnRectangle.Width = b;
            drawnRectangle.Height = d;
            sourceRectangle.X = texture.Width - b;
            sourceRectangle.Y = texture.Height - d;
            sourceRectangle.Width = b;
            sourceRectangle.Height = d;
            batch.Draw(texture, drawnRectangle, sourceRectangle, color);
        }
    }
}