<?php

namespace App\Http\Livewire;

use App\Models\Movimiento;
use Illuminate\Support\Facades\Auth;
use Livewire\Component;
use Livewire\WithPagination;

class CancelacionController extends Component
{
    use WithPagination;
    
    const CODIGO_CANCELACION = 3;
    public $buscador = '' , $modal = false, $modalDate = false;

    public $cancelacion, $created_at;

    protected $rules = [
        'cancelacion.codigo' => 'min:0',
        'cancelacion.pago_efectivo' => 'numeric',
        'cancelacion.estado_movimiento_id' => 'numeric',
        'cancelacion.motivo' => 'required',
        'cancelacion.user_id',
    ];

    public function updatingBuscador()
    {
        $this->resetPage();
    }

    public function render()
    {
        $cancelaciones = Movimiento::where([['codigo','like','%'.$this->buscador.'%'],['estado_movimiento_id','=',CancelacionController::CODIGO_CANCELACION]])->paginate(10);
        return view('venta.cancelacion',[
            'cancelaciones' => $cancelaciones
        ]);

    }

    public function create()
    {
        $this->clearInputs();
        $this->cancelacion = new Movimiento([
            'codigo' => 0,
            'pago_efectivo' => 0,
            'pago_tarjeta_debito' => 0,
            'pago_tarjeta_credito' => 0,
            'pago_vales' => 0,
            'precio_venta' => 0,
            'estado_movimiento_id' => 3,
        ]);

        $this->showModal();
    }

    public function save()
    {
        $this->validate([
            'cancelacion.pago_efectivo' => 'numeric|required|gte:1',
            'cancelacion.estado_movimiento_id' => 'numeric',
            'cancelacion.motivo' => 'required',
        ]);

        $this->cancelacion->user_id = Auth::user()->id;
        $this->cancelacion->save();

        session()->flash('message',"La cancelacion se ha registrado correctamente!");

        $this->clearInputs();
        $this->closeModal();
    }

    public function editDate(Movimiento $movimiento)
    {
        $this->cancelacion = $movimiento;
        $this->showModal('modalDate');
    }

    public function saveDate()
    {
        $this->validate([
            'created_at' => 'required',
        ]);

        $this->cancelacion->created_at = $this->created_at;
        $this->cancelacion->save();
        session()->flash('message',"La fecha ha sido cambiada correctamente.");

        $this->clearInputs();
        $this->closeModal('modalDate');
    }

    public function delete(Movimiento $venta)
    {

        if(auth()->user()->hasRole('admin'))
        {
            $venta->delete();
            session()->flash('message',"La cancelacion se ha eliminado del sistema.");
        }
    }


    public function showModal($modal = "modal")
    {
        $this->{$modal} = true;
    }

    public function closeModal($modal = "modal")
    {
        $this->{$modal} = false;
    }

    public function clearInputs()
    {
        $this->reset();
    }
}
