<?php

use Doom\Picture\DoomPalette;

test('provides a valid default doom palette', function (): void {
    $palette = DoomPalette::default();

    expect($palette->toArray())->toHaveCount(256);
    expect($palette->colorAt(0))->toBe([0, 0, 0]);
    expect($palette->colorAt(1))->toBe([31, 23, 11]);
});

test('extracts palette data from PLAYPAL bytes', function (): void {
    $palette0 = str_repeat("\x00\x00\x00", 256);
    $palette1 = str_repeat("\x10\x20\x30", 256);

    $palette = DoomPalette::fromPlaypal($palette0 . $palette1, 1);

    expect($palette->toArray())->toHaveCount(256);
    expect($palette->colorAt(0))->toBe([16, 32, 48]);
    expect($palette->colorAt(255))->toBe([16, 32, 48]);
});

test('rejects invalid PLAYPAL palette selection', function (): void {
    expect(fn () => DoomPalette::fromPlaypal("\x00", 0))->toThrow(RuntimeException::class);
    expect(fn () => DoomPalette::fromPlaypal(str_repeat("\x00", 768), -1))->toThrow(InvalidArgumentException::class);
});
