<?php

declare(strict_types=1);

namespace App\Scolarite\Domain\Model\Competency;

/**
 * Niveaux de compétence standards du référentiel français.
 *
 * Ces niveaux sont les valeurs par défaut pour tout établissement
 * en mode compétences. Un établissement peut définir des niveaux
 * personnalisés dans la table competency_levels.
 *
 * @see FR23 : Mode compétences sans notes chiffrées
 */
enum CompetencyLevel: string
{
    case NOT_ACQUIRED = 'not_acquired';
    case IN_PROGRESS = 'in_progress';
    case ACQUIRED = 'acquired';
    case EXCEEDED = 'exceeded';

    public function label(): string
    {
        return match ($this) {
            self::NOT_ACQUIRED => 'Non acquis',
            self::IN_PROGRESS => 'En cours d\'acquisition',
            self::ACQUIRED => 'Acquis',
            self::EXCEEDED => 'Dépassé',
        };
    }

    public function sortOrder(): int
    {
        return match ($this) {
            self::NOT_ACQUIRED => 1,
            self::IN_PROGRESS => 2,
            self::ACQUIRED => 3,
            self::EXCEEDED => 4,
        };
    }

    public function color(): string
    {
        return match ($this) {
            self::NOT_ACQUIRED => '#e74c3c',
            self::IN_PROGRESS => '#f39c12',
            self::ACQUIRED => '#2ecc71',
            self::EXCEEDED => '#3498db',
        };
    }
}
