<?php

namespace App\Http\Controllers;

use App\Http\Requests\CuponRequest;
use App\Models\Cupon;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;

class CuponController extends Controller
{
    public function index(): View
    {
        $cupones = Cupon::orderByDesc('created_at')->paginate(15);

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

    public function create(): View
    {
        return view('cupones.create');
    }

    public function store(CuponRequest $request): RedirectResponse
    {
        Cupon::create($this->normalizar($request->validated()));

        return redirect()->route('cupones.index')->with('status', 'Cupón registrado correctamente.');
    }

    public function edit(Cupon $cupon): View
    {
        return view('cupones.edit', compact('cupon'));
    }

    public function update(CuponRequest $request, Cupon $cupon): RedirectResponse
    {
        $cupon->update($this->normalizar($request->validated()));

        return redirect()->route('cupones.index')->with('status', 'Cupón actualizado correctamente.');
    }

    /**
     * El campo que no corresponde al tipo elegido se guarda vacio/cero,
     * para que nunca quede un valor residual de una edicion anterior.
     */
    private function normalizar(array $data): array
    {
        if ($data['tipo'] === 'porcentaje') {
            $data['monto'] = null;
        } else {
            $data['porcentaje'] = 0;
        }

        return $data;
    }

    public function toggle(Cupon $cupon): RedirectResponse
    {
        $cupon->update(['activo' => ! $cupon->activo]);

        return redirect()->route('cupones.index')->with('status', 'Estado del cupón actualizado.');
    }
}
