<?php

declare(strict_types=1);

namespace App\Administration\Domain\Model\Import;

/**
 * Value Object représentant une ligne du fichier d'import avec ses données mappées.
 *
 * Chaque ligne contient les valeurs extraites du fichier source,
 * associées aux champs Classeo via le ColumnMapping.
 */
final readonly class ImportRow
{
    /**
     * @param int                   $lineNumber Numéro de ligne dans le fichier source (1-based)
     * @param array<string, string> $rawData    Données brutes (colonne → valeur)
     * @param array<string, string> $mappedData Données mappées (champ Classeo → valeur)
     * @param list<ImportRowError>  $errors     Erreurs de validation
     */
    public function __construct(
        public int $lineNumber,
        public array $rawData,
        public array $mappedData,
        public array $errors = [],
    ) {
    }

    public function estValide(): bool
    {
        return $this->errors === [];
    }

    public function valeurChamp(StudentImportField $field): ?string
    {
        return $this->mappedData[$field->value] ?? null;
    }

    public function avecErreurs(ImportRowError ...$erreurs): self
    {
        return new self(
            $this->lineNumber,
            $this->rawData,
            $this->mappedData,
            array_values([...$this->errors, ...$erreurs]),
        );
    }
}
