<?php

namespace App\Imports;

use App\Models\Progression;
use App\Models\Discipline;
use Illuminate\Support\Facades\Log;

class ProgressionImport extends BaseImport
{
    protected $modelClass = Progression::class;

    public function model(array $row)
    {
        try {
            $this->validateRow($row);

            $progression = new Progression([
                'numero_lecon' => (int) ($row['numero_lecon'] ?? 0),
                'chapitre' => $this->normalizeText($row['chapitre'] ?? ''),
                'titre_lecon' => $this->normalizeText($row['titre_lecon'] ?? ''),
                'numero_semaine' => (int) ($row['numero_semaine'] ?? 0),
                'discipline_id' => $this->resolveRelationship($row['discipline_id'] ?? null, Discipline::class, 'libelle'),
            ]);

            $this->results['success_count']++;
            $this->logInfo('Progression imported successfully', ['numero_lecon' => $row['numero_lecon'] ?? null]);

            return $progression;
        } catch (\Exception $e) {
            $this->results['error_count']++;
            $this->results['errors'][] = [
                'row' => $row,
                'error' => $e->getMessage(),
            ];
            $this->logError('Progression import failed', [
                'error' => $e->getMessage(),
                'row' => $row,
            ]);
            return null;
        }
    }

    public function rules(): array
    {
        return [
            'numero_lecon' => 'required|integer',
            'chapitre' => 'required|string|max:255',
            'titre_lecon' => 'required|string|max:255',
            'numero_semaine' => 'required|integer',
            'discipline_id' => 'required|string',
        ];
    }

    public function customValidationMessages(): array
    {
        return [
            'numero_lecon.required' => 'Le numéro de leçon est obligatoire',
            'chapitre.required' => 'Le chapitre est obligatoire',
            'titre_lecon.required' => 'Le titre de la leçon est obligatoire',
            'numero_semaine.required' => 'Le numéro de semaine est obligatoire',
            'discipline_id.required' => 'La discipline est obligatoire',
        ];
    }
}
