<?php

declare(strict_types=1);

namespace App\Shared\Domain\Exception;

use App\Shared\Domain\Contract\SiteInterface;
use DomainException;

/**
 * Levee lorsqu'un utilisateur tente de selectionner comme site courant un
 * site qui ne fait pas partie de ses sites autorises.
 *
 * Exception purement domaine : la traduction HTTP (403) est faite par le
 * CurrentSiteProcessor via try/catch, aligne sur le pattern
 * SystemRoleDeletionException du module Core.
 *
 * Deplacee dans Shared/Domain/Exception/ pour eviter que le module Core
 * n'importe directement depuis le module Sites (violation du principe de
 * non-couplage inter-modules).
 */
class SiteNotAuthorizedException extends DomainException
{
    public static function forSite(SiteInterface $site): self
    {
        return new self(sprintf(
            'Le site "%s" ne fait pas partie de vos sites autorises.',
            $site->getName(),
        ));
    }
}
