<?php

namespace Tests\App\Services;

use App\Services\SchoolYearWriteGuard;
use App\Support\SchoolYear\SchoolYearContext;
use CodeIgniter\Test\CIUnitTestCase;
use RuntimeException;

final class SchoolYearWriteGuardTest extends CIUnitTestCase
{
    public function testAllowsActiveYearWrites(): void
    {
        $guard = new SchoolYearWriteGuard();

        $guard->assertWritable(new SchoolYearContext(4, '2025-2026', 'active'));

        $this->assertTrue(true);
    }

    public function testAllowsDraftOnlyWhenExplicitlyAllowedForAdmin(): void
    {
        $guard = new SchoolYearWriteGuard();

        $guard->assertWritable(
            new SchoolYearContext(5, '2026-2027', 'draft'),
            allowDraftForAdmin: true,
            isAdmin: true
        );

        $this->assertTrue(true);
    }

    public function testRejectsClosedYearWrites(): void
    {
        $this->expectException(RuntimeException::class);

        (new SchoolYearWriteGuard())->assertWritable(
            new SchoolYearContext(3, '2024-2025', 'closed')
        );
    }

    public function testRejectsDraftYearWritesByDefault(): void
    {
        $this->expectException(RuntimeException::class);

        (new SchoolYearWriteGuard())->assertWritable(
            new SchoolYearContext(5, '2026-2027', 'draft')
        );
    }
}
