<?php

namespace App\Http\Controllers\VoyagedifiantDashboard;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Chauffeur;
use Illuminate\Support\Facades\Storage;

class ChauffeurController extends Controller
{
    public function edit($id)
{
    // Récupération sécurisée avec gestion d'erreur intégrée
    $chauffeur = Chauffeur::findOrFail($id);

    return view('page.formeditConducteur', [
        'chauffeur' => $chauffeur,
        'currentImage' => $chauffeur->image_urlc // Passage explicite des données
    ]);
}

public function update(Request $request, $id)
{
    $chauffeur = Chauffeur::findOrFail($id);

    // Validation renforcée
    $validated = $request->validate([
        'name' => 'required|string|max:255',
        'new_image' => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
        'telephone' => [
            'required',
            'string',
            'max:20',
            function ($attribute, $value, $fail) {
                $cleaned = preg_replace('/[^0-9]/', '', $value);
                if (strlen($cleaned) < 8) {
                    $fail('Le numéro de téléphone doit contenir au moins 8 chiffres.');
                }
            }
        ],
        // 'disponible' => 'sometimes|boolean',
        'remove_image' => 'sometimes|boolean'
    ]);

    // Gestion avancée des images
    try {
        if ($request->hasFile('new_image')) {
            // Suppression sécurisée de l'ancienne image
            $this->deleteDriverImage($chauffeur->image_urlc);

            // Stockage de la nouvelle image
            $path = $request->file('new_image')->store('chauffeurs', 'public');
            $validated['image_urlc'] = $path;
        } elseif ($request->boolean('remove_image')) {
            // Suppression de l'image si demandée
            $this->deleteDriverImage($chauffeur->image_urlc);
            $validated['image_urlc'] = null;
        } elseif ($request->filled('existing_image')) {
            // Conservation de l'image existante
            $validated['image_urlc'] = $request->existing_image;
        }

        // Nettoyage du numéro de téléphone
        $validated['telephone'] = $this->cleanPhoneNumber($validated['telephone']);

        // Mise à jour
        $chauffeur->update($validated);

        return redirect()->route('listeConducteur')
               ->with('show_success_modal', true)
               ->with('modal_message', 'Le chauffeur a été modifié avec succès !');

    } catch (\Exception $e) {
        // Gestion des erreurs
        return back()->withInput()
               ->with('error', 'Une erreur est survenue lors de la mise à jour: '.$e->getMessage());
    }
}

public function destroy($id)
{
    try {
        $chauffeur = Chauffeur::findOrFail($id);

        // Suppression sécurisée de l'image
        $this->deleteDriverImage($chauffeur->image_urlc);

        // Suppression du chauffeur
        $chauffeur->delete();

        return redirect()->route('listeConducteur')
               ->with('show_success_modal', true)
               ->with('modal_message', 'Le chauffeur a été supprimé avec succès');

    } catch (\Exception $e) {
        return back()->with('error', 'Erreur lors de la suppression: '.$e->getMessage());
    }
}

// Méthodes privées utilitaires

/**
 * Supprime sécuritairement une image de chauffeur
 */
private function deleteDriverImage($imagePath)
{
    if ($imagePath && Storage::disk('public')->exists($imagePath)) {
        Storage::disk('public')->delete($imagePath);
    }
}

/**
 * Nettoie et formate un numéro de téléphone
 */
private function cleanPhoneNumber($phone)
{
    $cleaned = preg_replace('/[^0-9]/', '', $phone);
    return substr($cleaned, 0, 20); // Limite à 20 caractères max
}
}
