<?php

namespace App\Imports;

use App\Models\Rapport;
use App\Models\Etablissement;
use App\Models\Professeur;
use App\Models\Inspecteur;
use Illuminate\Support\Facades\Log;

class RapportImport extends BaseImport
{
    protected $modelClass = Rapport::class;

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

            $rapport = new Rapport([
                'date_inspection' => $this->formatDate($row['date_inspection'] ?? null),
                'classe_visitee' => $this->normalizeText($row['classe_visitee'] ?? ''),
                'passation' => $this->normalizeText($row['passation'] ?? ''),
                'titre_lecon' => $this->normalizeText($row['titre_lecon'] ?? ''),
                'deroulement' => $this->normalizeText($row['deroulement'] ?? ''),
                'appreciation_generale' => $this->normalizeText($row['appreciation_generale'] ?? ''),
                'numero_ordre' => (int) ($row['numero_ordre'] ?? 0),
                'note' => (float) ($row['note'] ?? 0),
                'etablissement_id' => $this->resolveRelationship($row['etablissement_id'] ?? null, Etablissement::class, 'libellefr'),
                'professeur_id' => $this->resolveRelationship($row['professeur_id'] ?? null, Professeur::class, 'nomfr'),
                'inspecteur_id' => $this->resolveRelationship($row['inspecteur_id'] ?? null, Inspecteur::class, 'nomfr'),
                'nombre_eleve' => (int) ($row['nombre_eleve'] ?? 0),
                'present' => (int) ($row['present'] ?? 0),
                'horaire' => $this->normalizeText($row['horaire'] ?? ''),
            ]);

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

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

    public function rules(): array
    {
        return [
            'date_inspection' => 'required|date',
            'classe_visitee' => 'required|string|max:255',
            'titre_lecon' => 'required|string|max:255',
            'numero_ordre' => 'required|integer',
            'note' => 'required|numeric|min:0|max:20',
            'etablissement_id' => 'required|string',
            'professeur_id' => 'required|string',
            'inspecteur_id' => 'required|string',
        ];
    }

    public function customValidationMessages(): array
    {
        return [
            'date_inspection.required' => 'La date d\'inspection est obligatoire',
            'classe_visitee.required' => 'La classe visitée est obligatoire',
            'titre_lecon.required' => 'Le titre de la leçon est obligatoire',
            'numero_ordre.required' => 'Le numéro d\'ordre est obligatoire',
            'note.required' => 'La note est obligatoire',
            'note.min' => 'La note doit être positive',
            'note.max' => 'La note ne peut pas dépasser 20',
            'etablissement_id.required' => 'L\'établissement est obligatoire',
            'professeur_id.required' => 'Le professeur est obligatoire',
            'inspecteur_id.required' => 'L\'inspecteur est obligatoire',
        ];
    }
}
