<?php

declare(strict_types=1);

namespace App\Administration\Domain\Model\ConsentementParental;

use DateTimeImmutable;

/**
 * Value Object représentant le consentement parental.
 *
 * Requis pour les utilisateurs mineurs (< 15 ans) conformément au RGPD (NFR-C1).
 * Le consentement doit être donné par un parent avant que l'élève puisse activer son compte.
 */
final readonly class ConsentementParental
{
    public function __construct(
        public string $parentId,
        public string $eleveId,
        public DateTimeImmutable $dateConsentement,
        public string $ipAddress,
    ) {
    }

    /**
     * Crée un nouveau consentement parental horodaté.
     */
    public static function accorder(
        string $parentId,
        string $eleveId,
        DateTimeImmutable $at,
        string $ipAddress,
    ): self {
        return new self(
            parentId: $parentId,
            eleveId: $eleveId,
            dateConsentement: $at,
            ipAddress: $ipAddress,
        );
    }

    public function estPourEleve(string $eleveId): bool
    {
        return $this->eleveId === $eleveId;
    }
}
