<?php

namespace App\Imports;

use App\Models\StructurePedagogique;
use App\Models\Niveau;
use App\Models\Etablissement;
use App\Models\Annee;
use Illuminate\Support\Facades\Log;

class StructurePedagogiqueImport extends BaseImport
{
    protected $modelClass = StructurePedagogique::class;

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

            $structure = new StructurePedagogique([
                'niveau_id' => $this->resolveRelationship($row['niveau_id'] ?? null, Niveau::class, 'libelle'),
                'nombre_section' => (int) ($row['nombre_section'] ?? 0),
                'nombre_eleves' => (int) ($row['nombre_eleves'] ?? 0),
                'nombre_filles' => (int) ($row['nombre_filles'] ?? 0),
                'etablissement_id' => $this->resolveRelationship($row['etablissement_id'] ?? null, Etablissement::class, 'libellefr'),
                'annee_id' => $this->resolveRelationship($row['annee_id'] ?? null, Annee::class, 'libelle'),
            ]);

            $this->results['success_count']++;
            $this->logInfo('StructurePedagogique imported successfully', ['row' => $row]);

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

    public function rules(): array
    {
        return [
            'niveau_id' => 'required|string',
            'nombre_section' => 'required|numeric|min:0',
            'nombre_eleves' => 'required|numeric|min:0',
            'nombre_filles' => 'required|numeric|min:0',
            'etablissement_id' => 'required|string',
            'annee_id' => 'required|string',
        ];
    }

    public function customValidationMessages(): array
    {
        return [
            'niveau_id.required' => 'Le niveau est obligatoire',
            'nombre_section.required' => 'Le nombre de sections est obligatoire',
            'nombre_eleves.required' => 'Le nombre d\'élèves est obligatoire',
            'nombre_filles.required' => 'Le nombre de filles est obligatoire',
            'etablissement_id.required' => 'L\'établissement est obligatoire',
            'annee_id.required' => 'L\'année est obligatoire',
        ];
    }
}
