using Minint.Core.Models;
using Minint.Core.Services;
using Minint.Core.Services.Impl;

namespace Minint.Tests;

public class PatternGeneratorTests
{
    private readonly PatternGenerator _gen = new();

    [Theory]
    [InlineData(PatternType.Checkerboard)]
    [InlineData(PatternType.HorizontalGradient)]
    [InlineData(PatternType.VerticalGradient)]
    [InlineData(PatternType.HorizontalStripes)]
    [InlineData(PatternType.VerticalStripes)]
    [InlineData(PatternType.ConcentricCircles)]
    [InlineData(PatternType.Tile)]
    public void Generate_AllTypes_ProducesValidDocument(PatternType type)
    {
        var colors = new[] { new RgbaColor(255, 0, 0, 255), new RgbaColor(0, 0, 255, 255) };
        var doc = _gen.Generate(type, 16, 16, colors, 4, 4);

        Assert.Equal($"Pattern ({type})", doc.Name);
        Assert.Single(doc.Layers);
        Assert.Equal(256, doc.Layers[0].Pixels.Length);
        Assert.True(doc.Palette.Count >= 2);
    }

    [Fact]
    public void Generate_Checkerboard_AlternatesColors()
    {
        var colors = new[] { new RgbaColor(255, 0, 0, 255), new RgbaColor(0, 255, 0, 255) };
        var doc = _gen.Generate(PatternType.Checkerboard, 4, 4, colors, 2);

        var layer = doc.Layers[0];
        int topLeft = layer.Pixels[0];
        int topRight = layer.Pixels[2]; // cellSize=2, so (2,0) is next cell
        Assert.NotEqual(topLeft, topRight);
    }
}
