<?php

namespace App\Imports;

use App\Models\Infrastructure;
use App\Models\TypeInfrastructure;
use App\Models\Etablissement;
use App\Models\Annee;
use Illuminate\Support\Facades\Log;

class InfrastructureImport extends BaseImport
{
    protected $modelClass = Infrastructure::class;

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

            $infrastructure = new Infrastructure([
                'type_infrastructure_id' => $this->resolveRelationship($row['type_infrastructure_id'] ?? null, TypeInfrastructure::class, 'libelle'),
                'nombre_movais' => (int) ($row['nombre_movais'] ?? 0),
                'nombre_moyens' => (int) ($row['nombre_moyens'] ?? 0),
                'nombre_bons' => (int) ($row['nombre_bons'] ?? 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('Infrastructure imported successfully', ['row' => $row]);

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

    public function rules(): array
    {
        return [
            'type_infrastructure_id' => 'required|string',
            'nombre_movais' => 'required|numeric|min:0',
            'nombre_moyens' => 'required|numeric|min:0',
            'nombre_bons' => 'required|numeric|min:0',
            'etablissement_id' => 'required|string',
            'annee_id' => 'required|string',
        ];
    }

    public function customValidationMessages(): array
    {
        return [
            'type_infrastructure_id.required' => 'Le type d\'infrastructure est obligatoire',
            'nombre_movais.required' => 'Le nombre movais est obligatoire',
            'nombre_moyens.required' => 'Le nombre moyens est obligatoire',
            'nombre_bons.required' => 'Le nombre bons est obligatoire',
            'etablissement_id.required' => 'L\'établissement est obligatoire',
            'annee_id.required' => 'L\'année est obligatoire',
        ];
    }
}
