<?php

namespace App\Imports;

use App\Models\Professeur;
use App\Models\Statut;
use App\Models\Cycle;
use Illuminate\Support\Facades\Log;

class ProfesseurImport extends BaseImport
{
    protected $modelClass = Professeur::class;

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

            // Check for duplicate by matricule
            if ($this->handleDuplicate($row, 'matricule')) {
                return null;
            }

            $professeur = new Professeur([
                'nomar' => $this->normalizeText($row['nomar'] ?? ''),
                'nomfr' => $this->normalizeText($row['nomfr'] ?? ''),
                'matricule' => $this->normalizeText($row['matricule'] ?? ''),
                'nni' => $this->normalizeText($row['nni'] ?? ''),
                'date_naissance' => $this->formatDate($row['date_naissance'] ?? null),
                'lieu_naissance_ar' => $this->normalizeText($row['lieu_naissance_ar'] ?? ''),
                'lieu_naissance_fr' => $this->normalizeText($row['lieu_naissance_fr'] ?? ''),
                'discipline_origine' => $this->normalizeText($row['discipline_origine'] ?? ''),
                'contact' => $this->normalizeText($row['contact'] ?? ''),
                'statut_id' => $this->resolveRelationship($row['statut_id'] ?? null, Statut::class, 'libelle'),
                'cycle_id' => $this->resolveRelationship($row['cycle_id'] ?? null, Cycle::class, 'libelle'),
                'photo' => $this->normalizeText($row['photo'] ?? ''),
                'date_recritement' => $this->formatDate($row['date_recritement'] ?? null),
            ]);

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

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

    public function rules(): array
    {
        return [
            'nomar' => 'required|string|max:255',
            'nomfr' => 'required|string|max:255',
            'matricule' => 'required|string|max:255|unique:professeurs,matricule',
            'nni' => 'required|string|max:255',
            'date_naissance' => 'required|date',
            'lieu_naissance_ar' => 'required|string|max:255',
            'lieu_naissance_fr' => 'required|string|max:255',
            'discipline_origine' => 'required|string|max:255',
            'contact' => 'required|string|max:255',
            'statut_id' => 'required|string',
            'cycle_id' => 'required|string',
        ];
    }

    public function customValidationMessages(): array
    {
        return [
            'nomar.required' => 'Le nom en arabe est obligatoire',
            'nomfr.required' => 'Le nom en français est obligatoire',
            'matricule.required' => 'Le matricule est obligatoire',
            'matricule.unique' => 'Ce matricule existe déjà',
            'nni.required' => 'Le NNI est obligatoire',
            'date_naissance.required' => 'La date de naissance est obligatoire',
            'lieu_naissance_ar.required' => 'Le lieu de naissance en arabe est obligatoire',
            'lieu_naissance_fr.required' => 'Le lieu de naissance en français est obligatoire',
            'discipline_origine.required' => 'La discipline d\'origine est obligatoire',
            'contact.required' => 'Le contact est obligatoire',
            'statut_id.required' => 'Le statut est obligatoire',
            'cycle_id.required' => 'Le cycle est obligatoire',
        ];
    }
}
