using System.Collections;

namespace Gma.QrCodeNet.Encoding;

internal struct MatrixRectangle : IEnumerable<MatrixPoint>
{
    internal MatrixRectangle(MatrixPoint location, MatrixSize size) :
        this()
    {
        Location = location;
        Size = size;
    }

    public MatrixPoint Location { get; private set; }
    public MatrixSize Size { get; private set; }

    public IEnumerator<MatrixPoint> GetEnumerator()
    {
        for (int j = Location.Y; j < Location.Y + Size.Height; j++)
        {
            for (int i = Location.X; i < Location.X + Size.Width; i++)
            {
                yield return new MatrixPoint(i, j);
            }
        }
    }

    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

    public override string ToString() => $"Rectangle({Location.X};{Location.Y}):({Size.Width} x {Size.Height})";
}