<?php

namespace Tests\App\Support\SchoolYear;

use App\Support\SchoolYear\SchoolYearTableRegistry;
use CodeIgniter\Test\CIUnitTestCase;
use InvalidArgumentException;

final class SchoolYearTableRegistryTest extends CIUnitTestCase
{
    public function testClassifiesYearScopedTables(): void
    {
        $this->assertSame('YEAR_SCOPED', SchoolYearTableRegistry::categoryOf('invoices'));
        $this->assertSame('YEAR_SCOPED', SchoolYearTableRegistry::categoryOf('attendance_data'));
    }

    public function testClassifiesGlobalTables(): void
    {
        $this->assertSame('GLOBAL', SchoolYearTableRegistry::categoryOf('users'));
        $this->assertSame('GLOBAL', SchoolYearTableRegistry::categoryOf('configuration'));
    }

    public function testClassifiesIdentityTables(): void
    {
        $this->assertSame('IDENTITY_WITH_YEAR_RELATION', SchoolYearTableRegistry::categoryOf('students'));
        $this->assertSame('IDENTITY_WITH_YEAR_RELATION', SchoolYearTableRegistry::categoryOf('teachers'));
    }

    public function testClassifiesContextTables(): void
    {
        $this->assertSame('CONTEXT', SchoolYearTableRegistry::categoryOf('notifications'));
        $this->assertSame('CONTEXT', SchoolYearTableRegistry::categoryOf('support_requests'));
    }

    public function testRejectsUnregisteredTables(): void
    {
        $this->expectException(InvalidArgumentException::class);

        SchoolYearTableRegistry::categoryOf('unknown_table');
    }
}
