<?php

namespace App\Http\Livewire\Anestesiologo;

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

class Listado extends Component
{
    use WithPagination;
    /**ANESTESIOLOGO**/
    public $anestesiologo;
    public $id_anestesiologo;
    public $tipo_documento;
    public $documento;
    public $nombre;
    public $genero;
    public $activo;

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

    /********************************/
    /** OYENTES                    **/
    /********************************/
    protected $listeners = ['ev_refrescar_anestesiologos' => '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([
            'anestesiologo',
            'id_anestesiologo',
            'documento',
            'nombre',
            'genero',
            'activo',
        ]);
    }
    /********************************/
    /**  SELECCIONAR ANESTESIOLOGO **/
    /********************************/
    public function seleccionar_anestesiologo($_id)
    {
        $this->resetear();
        $this->anestesiologo = Anestesiologo::find($_id);
        /********************************************/
        /*** DIVIDIMOS EL DOCUMENTO DEL USUARIO   ***/
        /********************************************/
        $tipo_documento = str_split($this->anestesiologo->documento);
        $this->tipo_documento = $tipo_documento[0];
        $this->documento = substr($this->anestesiologo->documento, 1);

        $this->id_anestesiologo = $this->anestesiologo->id;
        $this->nombre = $this->anestesiologo->nombre;
        $this->genero = $this->anestesiologo->genero;
        $this->activo = $this->anestesiologo->activo;
    }
    /*************************/
    /**  VALIDAR            **/
    /*************************/
    public function rules()
    {
        return [
            'documento' => ['required'],
            'nombre' => ['required', 'string', 'min:3', 'max:55'],
            'genero' => ['required'],
        ];
    }
    /****************************/
    /**  ELIMINAR ANESTESIOLOGO **/
    /****************************/
    public function eliminar_anestesiologo()
    {
        $this->anestesiologo->update(['activo' => '0']);
        $mensaje = 'El anestesiologo: <strong> ' . $this->nombre . ' </strong> ha sido eliminada exitosamente';
        $this->emit('ev_cerrar_modal', 'modal_eliminar_anestesiologo');
        $this->emit('ev_msj_guardado', $mensaje);
        $this->resetear();
    }
    /*******************************/
    /**  ACTUALIZAR ANESTESIOLOGO  **/
    /*******************************/
    public function actualizar_anestesiologo()
    {
        $this->validate();
        $this->anestesiologo->update(
            ['documento' => $this->tipo_documento . $this->documento,
                'nombre' => $this->nombre,
                'genero' => $this->genero,
                'activo' => $this->activo]
        );
        $mensaje = 'El anestesiologo: <strong> ' . $this->nombre . ' </strong> ha sido actualizada exitosamente';
        $this->emit('ev_cerrar_modal', 'modal_actualizar_anestesiologo');
        $this->emit('ev_msj_guardado', $mensaje);
        $this->resetear();
    }
    /****************************/
    /**  RENDER                **/
    /****************************/
    public function render()
    {
        // $this->emit('ev_modal_test');
        $anestesiologos = DB::table('anestesiologos')
            ->where('anestesiologos.activo', '!=', '0')
            ->select(
                'anestesiologos.id',
                'anestesiologos.documento',
                'anestesiologos.nombre',
                'anestesiologos.genero',
                'anestesiologos.activo'
            )
            ->where(function ($query) {
                $query->where('anestesiologos.nombre', 'like', '%' . $this->buscador_anestesiologo . '%')
                    ->Orwhere('anestesiologos.documento', 'like', '%' . $this->buscador_anestesiologo . '%')
                    ->Orwhere('anestesiologos.genero', 'like', '%' . $this->buscador_anestesiologo . '%')
                    ->Orwhere('anestesiologos.activo', 'like', '%' . $this->buscador_anestesiologo . '%');
            })->orderBy($this->campo_orden, $this->ordenado)
            ->paginate($this->numero_anestesiologos);
        $count_anestesiologos_busqueda = $anestesiologos->count();
        $count_anestesiologos = DB::table('anestesiologos')->where('anestesiologos.activo', '!=', '0')->count();
        return view('livewire.anestesiologo.listado', compact('anestesiologos', 'count_anestesiologos_busqueda', 'count_anestesiologos'));
    }
}
