<?php

namespace App\Imports;

use App\Models\Inspecteur;
use App\Models\Pole;
use App\Models\Discipline;
use Illuminate\Support\Facades\Log;

class InspecteurImport extends BaseImport
{
    protected $modelClass = Inspecteur::class;

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

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

            $inspecteur = new Inspecteur([
                'nomfr' => $this->normalizeText($row['nomfr'] ?? ''),
                'nomar' => $this->normalizeText($row['nomar'] ?? ''),
                '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'] ?? ''),
                'date_affectation' => $this->formatDate($row['date_affectation'] ?? null),
                'contact' => $this->normalizeText($row['contact'] ?? ''),
                'email' => $this->normalizeText($row['email'] ?? ''),
                'date_mise_en_corps_IES' => $this->formatDate($row['date_mise_en_corps_IES'] ?? null),
                'bank' => $this->normalizeText($row['bank'] ?? ''),
                'compte' => $this->normalizeText($row['compte'] ?? ''),
                'photo' => $this->normalizeText($row['photo'] ?? ''),
                'matrimonialite' => $this->normalizeText($row['matrimonialite'] ?? ''),
                'date_recri_fp' => $this->formatDate($row['date_recri_fp'] ?? null),
                'pole_id' => $this->resolveRelationship($row['pole_id'] ?? null, Pole::class, 'libelle'),
                'discipline_id' => $this->resolveRelationship($row['discipline_id'] ?? null, Discipline::class, 'libelle'),
            ]);

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

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

    public function rules(): array
    {
        return [
            'nomfr' => 'required|string|max:255',
            'nomar' => 'required|string|max:255',
            'matricule' => 'required|string|max:255|unique:inspecteurs,matricule',
            'nni' => 'required|string|max:255',
            'date_naissance' => 'required|date',
            'lieu_naissance_ar' => 'required|string|max:255',
            'lieu_naissance_fr' => 'required|string|max:255',
            'date_affectation' => 'required|date',
            'contact' => 'required|string|max:255',
            'email' => 'required|email|max:255',
            'pole_id' => 'required|string',
            'discipline_id' => 'required|string',
        ];
    }

    public function customValidationMessages(): array
    {
        return [
            'nomfr.required' => 'Le nom en français est obligatoire',
            'nomar.required' => 'Le nom en arabe 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',
            'date_affectation.required' => 'La date d\'affectation est obligatoire',
            'contact.required' => 'Le contact est obligatoire',
            'email.required' => 'L\'email est obligatoire',
            'email.email' => 'L\'email n\'est pas valide',
            'pole_id.required' => 'Le pôle est obligatoire',
            'discipline_id.required' => 'La discipline est obligatoire',
        ];
    }
}
