namespace Gma.QrCodeNet.Encoding;

public abstract class BitMatrix
{
    public abstract int Width { get; }
    public abstract int Height { get; }
    public abstract bool[,] InternalArray { get; }

    public abstract bool this[int i, int j] { get; set; }

    internal void CopyTo(TriStateMatrix target, MatrixRectangle sourceArea, MatrixPoint targetPoint, MatrixStatus mstatus)
    {
        for (int j = 0; j < sourceArea.Size.Height; j++)
        {
            for (int i = 0; i < sourceArea.Size.Width; i++)
            {
                bool value = this[sourceArea.Location.X + i, sourceArea.Location.Y + j];
                target[targetPoint.X + i, targetPoint.Y + j, mstatus] = value;
            }
        }
    }

    internal void CopyTo(TriStateMatrix target, MatrixPoint targetPoint, MatrixStatus mstatus) => CopyTo(target, new MatrixRectangle(new MatrixPoint(0, 0), new MatrixSize(Width, Height)), targetPoint, mstatus);
}