<?php

declare(strict_types=1);

namespace App\Administration\Application\Port;

use App\Administration\Domain\Model\SchoolClass\AcademicYearId;
use App\Administration\Domain\Model\SchoolClass\ClassId;
use App\Administration\Domain\Model\Subject\SubjectId;
use App\Administration\Domain\Model\User\UserId;
use App\Shared\Domain\Tenant\TenantId;

/**
 * Port pour vérifier si un enseignant est affecté à une classe/matière.
 *
 * Utilisé par les Voters (GradeVoter, HomeworkVoter) pour autoriser
 * la saisie de notes ou devoirs uniquement aux enseignants affectés.
 *
 * @see AC2: Peut saisir notes pour cette matière dans cette classe
 * @see AC4: Bloquer saisie si affectation retirée
 */
interface TeacherAssignmentChecker
{
    public function estAffecte(
        UserId $teacherId,
        ClassId $classId,
        SubjectId $subjectId,
        AcademicYearId $academicYearId,
        TenantId $tenantId,
    ): bool;
}
