<?php

declare(strict_types=1);

namespace App\Scolarite\Domain\Exception;

use function array_column;

use DomainException;

use function implode;

/**
 * Levée quand un devoir enfreint les règles configurées
 * et que l'enseignant n'a pas encore confirmé.
 */
final class ReglesDevoirsNonRespecteesException extends DomainException
{
    /**
     * @param array<array{ruleType: string, message: string, params: array<string, mixed>}> $warnings
     * @param string[]                                                                      $suggestedDates Dates conformes alternatives (format Y-m-d)
     */
    public function __construct(
        public readonly array $warnings,
        public readonly bool $bloquant = false,
        public readonly array $suggestedDates = [],
    ) {
        $raisons = implode(' ', array_column($warnings, 'message'));

        parent::__construct(
            $bloquant
                ? 'Impossible de créer ce devoir : ' . $raisons
                : 'Le devoir ne respecte pas les règles configurées.',
        );
    }
}
