<?php

namespace App\Http\Controllers;

use App\Http\Requests\AjusteInventarioRequest;
use App\Models\Inventario;
use App\Models\MovimientoInventario;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;

class AjusteInventarioController extends Controller
{
    public function create(): View
    {
        $items = Inventario::where('active', true)->orderBy('nombre')->get();

        return view('ajustes.create', compact('items'));
    }

    public function store(AjusteInventarioRequest $request): RedirectResponse
    {
        $data = $request->validated();

        DB::transaction(function () use ($data, $request) {
            $inventario = Inventario::lockForUpdate()->findOrFail($data['inventario_id']);

            $nuevoStock = $inventario->stock_actual + $data['cantidad'];

            if ($nuevoStock < 0) {
                abort(422, 'El ajuste dejaría el stock en negativo.');
            }

            $inventario->update(['stock_actual' => $nuevoStock]);

            MovimientoInventario::create([
                'inventario_id' => $inventario->id,
                'user_id' => $request->user()->id,
                'tipo' => MovimientoInventario::TIPO_AJUSTE,
                'cantidad' => $data['cantidad'],
                'stock_resultante' => $nuevoStock,
                'motivo' => $data['motivo'],
            ]);
        });

        return redirect()->route('ajustes.create')->with('status', 'Ajuste de inventario registrado correctamente.');
    }
}
