<?php

namespace App\Http\Controllers;

use App\Models\Department;
use Illuminate\Http\Request;
use App\Imports\DepartementsImport;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;

class DepartmentController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(Request $request)
    {
        //Récupère la liste des départments non supprimés
        $query = Department::orderBy('created_at', 'desc')->with('user')
            ->whereDeletedAt(null);

        //Recherche par nom ou nom du responsable
        if ($search = $request->get('search')) {
            $query->where(function ($q) use ($search) {
                $q->where('name', 'like', "%{$search}%")
                    ->orWhere('name_of_manager', 'like', "%{$search}%");
            });
        }

        //Pagination des résultats : withQueryString permet de conserver les paramètres de la recherche dans l'url
        $departments = $query->paginate(10)->withQueryString();

        return view('departments.index', compact('departments'));
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //Règle de validation des données
        $validated = $request->validate([
            'name' => 'required|string|max:50',
            'name_of_manager' => 'required|string|max:150',
            'phone_of_manager' => 'required|string|min:12',
        ]);

        //Association à l'utilisateur connecté
        $validated['user_id'] = Auth::id();
        //Création du département
        $department = Department::create($validated);
        //Redirection vers la page de liste des départements
        return redirect()->route('departments.index')->with('success', 'Département créé avec succès');
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }



    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        //Validation des
        $validated = $request->validate([
            'name' => 'required|string|max:50',
            'name_of_manager' => 'required|string|max:150',
            'phone_of_manager' => 'required|string|max:15',
        ]);

        //Récupération de l'id du département à modifier
        $department = Department::find($id);
        //Mise à jour des données modifiées
        $department->update($validated);
        //Redirection sur la page de listing des départements
        return redirect()->route('departments.index')->with('success', 'Département modifié avec succès');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //Récupération de l'id du département à supprimer
        $department = Department::find($id);

        //Vérification si le département existe
        if (!$department) {
            return redirect()->route('departments.index')->with('error', 'Département non trouvé');
        }

        //Suppression du département
        $department->delete();
        //Redirection sur la page de listing des départements
        return redirect()->route('departments.index')->with('success', 'Département supprimé avec succès');
    }

    /**
     * Importation des départements depuis un fichier excel
     */
    public function import(Request $request)
    {
        // Validation du fichier
        $request->validate([
            'file' => 'required|file|mimes:xlsx,xls,csv',
        ]);

        if (!$request->hasFile('file')) {
            return redirect()->route('departments.index')->with('error', 'Fichier non trouvé');
        }

        try {
            // Import du fichier directement
            Excel::import(new DepartementsImport, $request->file('file'));

            return redirect()->route('departments.index')->with('success', 'Import terminé. Les départements ont été importés avec succès.');
        } catch (\Exception $e) {
            return redirect()->route('departments.index')->with('error', 'Erreur lors de l\'import : ' . $e->getMessage());
        }
    }
}