<?php

namespace App\Http\Livewire\Intervencion;

use App\Models\Intervencion;
use Illuminate\Support\Facades\DB;
use Livewire\Component;
use Livewire\WithPagination;

class Listado extends Component
{
    use WithPagination;
    /**CLINICA**/
    public $intervencion;
    public $id_intervencion;
    public $nombre;
    public $clinica;
    public $activo;

    /**UTILIDAD*/
    protected $paginationTheme = 'bootstrap';
    public $buscador_intervencion;
    public $campo_orden = 'id';
    public $ordenado = 'desc';
    public $numero_intervencions = 8;

    /********************************/
    /** OYENTES                    **/
    /********************************/
    protected $listeners = ['ev_refrescar_intervencions' => 'render'];

    /****************************/
    /**  ORDENAR POR COLUMNA   **/
    /****************************/
    public function ordenar($_columna)
    {
        $this->campo_orden = $_columna;

        if ($this->campo_orden == $_columna) {
            if ($this->ordenado == 'desc') {
                $this->ordenado = 'asc';
            } else {
                $this->ordenado = 'desc';
            }
        } else {
            $this->campo_orden = $_columna;
            $this->ordenado = 'asc';
        }
    }
    /*************************/
    /**  DATATABLE          **/
    /*************************/
    public function updatingBuscador()
    {
        $this->resetPage();
    }
    /*************************/
    /**  RESETEAR           **/
    /*************************/
    public function resetear()
    {
        $this->reset([
            'intervencion',
            'id_intervencion',
            'nombre',
            'activo',
        ]);
    }
    /********************************/
    /**  SELECCIONAR CLINICA       **/
    /********************************/
    public function seleccionar_intervencion($_id)
    {
        $this->resetear();
        $this->intervencion = Intervencion::find($_id);
        $this->id_intervencion = $this->intervencion->id;
        $this->nombre = $this->intervencion->nombre;
        $this->clinica = $this->intervencion->clinica_id;
        $this->activo = $this->intervencion->activo;
    }
    /*************************/
    /**  VALIDAR            **/
    /*************************/
    public function rules()
    {
        return [
            'nombre' => ['required', 'string', 'min:3', 'max:255'],
        ];
    }
    /****************************/
    /**  ELIMINAR CLINICA **/
    /****************************/
    public function eliminar_intervencion()
    {
        $this->intervencion->update(['activo' => '0']);
        $mensaje = 'La intervencion: <strong> ' . $this->nombre . ' </strong> ha sido eliminada exitosamente';
        $this->emit('ev_cerrar_modal', 'modal_eliminar_intervencion');
        $this->emit('ev_msj_guardado', $mensaje);
        $this->resetear();
    }
    /*******************************/
    /**  ACTUALIZAR CLINICA  **/
    /*******************************/
    public function actualizar_intervencion()
    {
        $this->validate();
        $this->intervencion->update(
            [
                'nombre' => $this->nombre,
                'clinica_id' => $this->clinica,
                'activo' => $this->activo,
            ]
        );
        $mensaje = 'La intervencion: <strong> ' . $this->nombre . ' </strong> ha sido actualizada exitosamente';
        $this->emit('ev_cerrar_modal', 'modal_actualizar_intervencion');
        $this->emit('ev_msj_guardado', $mensaje);
        $this->resetear();
    }
    /****************************/
    /**  RENDER                **/
    /****************************/
    public function render()
    {
        $clinicas = DB::table('clinicas')->where('clinicas.activo', '!=', '0')->get();
        // $this->emit('ev_modal_test');
        $intervencions = DB::table('intervencions')
            ->join('clinicas', 'clinicas.id', '=', 'intervencions.clinica_id')
            ->where('intervencions.activo', '!=', '0')
            ->select(
                'intervencions.id',
                'intervencions.nombre',
                'clinicas.nombre as clinica',
                'intervencions.activo'
            )
            ->where(function ($query) {
                $query->where('intervencions.nombre', 'like', '%' . $this->buscador_intervencion . '%')
                    ->Orwhere('clinicas.nombre', 'like', '%' . $this->buscador_intervencion . '%')
                    ->Orwhere('intervencions.activo', 'like', '%' . $this->buscador_intervencion . '%');
            })->orderBy($this->campo_orden, $this->ordenado)
            ->paginate($this->numero_intervencions);
        $count_intervencions_busqueda = $intervencions->count();
        $count_intervencions = DB::table('intervencions')->where('intervencions.activo', '!=', '0')->count();
        return view('livewire.intervencion.listado', compact('intervencions','clinicas','count_intervencions_busqueda', 'count_intervencions'));
    }
}
