<?php

namespace App\Http\Controllers;

use App\Exports\StocksExport;
use App\Models\Magasin;
use App\Models\Produit;
use App\Models\Stock;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Maatwebsite\Excel\Facades\Excel;

class StockController extends Controller
{
    /**
     * Liste global des stocks avec filtre par magasin et produit.
     */
    public function __invoke(Request $request)
    {
        $query = Stock::with(['magasin', 'produit'])->latest();

        if ($request->filled('magasin_id')) {
            $query->where('magasin_id', $request->magasin_id);
        }

        if ($request->filled('produit_id')) {
            $query->where('produit_id', $request->produit_id);
        }

        $stocks = $query->paginate(15)->withQueryString();

        $magasins = Magasin::orderBy('nom')->get(['id', 'nom']);
        $produits = Produit::orderBy('designation')->get(['id', 'designation', 'reference']);

        return view('stock.index', compact('stocks', 'magasins', 'produits'));
    }

    /**
     * Exporte les stocks en XLSX selon les filtres appliqués.
     */
    public function export(Request $request)
    {
        $query = Stock::with(['magasin', 'produit'])->latest();

        if ($request->filled('magasin_id')) {
            $query->where('magasin_id', $request->magasin_id);
        }

        if ($request->filled('produit_id')) {
            $query->where('produit_id', $request->produit_id);
        }

        $stocks = $query->get();

        $filename = 'stocks';
        if ($request->filled('magasin_id')) {
            $magasin = Magasin::find($request->magasin_id);
            $filename .= '_' . ($magasin ? Str::slug($magasin->nom) : $request->magasin_id);
        }
        if ($request->filled('produit_id')) {
            $produit = Produit::find($request->produit_id);
            $filename .= '_' . ($produit ? Str::slug($produit->designation) : $request->produit_id);
        }
        $filename .= '_' . now()->format('Y-m-d_H-i') . '.xlsx';

        return Excel::download(new StocksExport($stocks), $filename);
    }
}
