<?php

namespace App\Http\Livewire\Cirujano;

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


class Listado extends Component
{
    use WithPagination;
    /**INTERVENCION**/
    public $cirujano;
    public $id_cirujano;
    public $tipo_documento;
    public $documento;
    public $nombre;
    public $genero;
    public $activo;


    public $btn_activo = "disabled";

    /**UTILIDAD*/
    protected $paginationTheme = 'bootstrap';
    public $buscador_cirujano;
    public $campo_orden = 'id';
    public $ordenado = 'desc';
    public $numero_cirujanos = 10;

    /********************************/
    /** OYENTES                    **/
    /********************************/
    protected $listeners = ['ev_refrescar_cirujanos' => '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->btn_activo = "disabled";

        $this->reset([
            'cirujano',
            'id_cirujano',
            'documento',
            'nombre',
            'genero',
            'activo',
        ]);
    }
    /********************************/
    /**  SELECCIONAR CIRUJANO  **/
    /********************************/
    public function seleccionar_cirujano($_id)
    {
        $this->resetear();
        $this->cirujano = Cirujano::find($_id);
        /********************************************/
        /*** DIVIDIMOS EL DOCUMENTO DEL USUARIO   ***/
        /********************************************/
        $tipo_documento = str_split($this->cirujano->documento);
        $this->tipo_documento = $tipo_documento[0];
        $this->documento = substr($this->cirujano->documento, 1);

        $this->id_cirujano = $this->cirujano->id;
        $this->nombre = $this->cirujano->nombre;
        $this->genero = $this->cirujano->genero;
        $this->activo = $this->cirujano->activo;

        $this->btn_activo = null;

    }
    /*************************/
    /**  VALIDAR            **/
    /*************************/
    public function rules()
    {
        return [
            'documento' => ['required', 'min:5', 'max:15'],
            'nombre' => ['required','string','min:3','max:50'],
            'genero' => ['required'],
        ];
    }
    /****************************/
    /**  ELIMINAR INTERVENCION **/
    /****************************/
    public function eliminar_cirujano()
    {
        $this->cirujano->update(['activo' => '0']);
        $mensaje = 'El cirujano: <strong> ' . $this->nombre . ' </strong> ha sido eliminada exitosamente';
        $this->emit('ev_cerrar_modal', 'modal_eliminar_cirujano');
        $this->emit('ev_msj_guardado', $mensaje);
        $this->resetear();
    }
    /*******************************/
    /**  ACTUALIZAR INTERVENCION  **/
    /*******************************/
    public function actualizar_cirujano()
    {
        /****************************/
        /** VALIDAR                **/
        /** SELECT TIPO DOCUMENTO  **/
        /** SELECT GENERO          **/
        /****************************/
        if(empty($this->tipo_documento))
        {
            $this->emit('ev_cerrar_modal', 'modal_actualizar_cirujano');
            $mensaje = 'Debe seleccionar un tipo de documento para el cirujano.';
            $this->emit('ev_msj_info', $mensaje);
        } 
        elseif(empty($this->genero))
        {
            $this->emit('ev_cerrar_modal', 'modal_actualizar_cirujano');
            $mensaje = 'Debe seleccionar un genero para el cirujano.';
            $this->emit('ev_msj_info', $mensaje);
        }
        elseif(empty($this->activo))
        {
            $this->emit('ev_cerrar_modal', 'modal_actualizar_cirujano');
            $mensaje = 'Debe seleccionar el estado del cirujano.';
            $this->emit('ev_msj_info', $mensaje);
        }
        else
        {
            $this->emit('ev_cerrar_modal', 'modal_actualizar_cirujano');
            $this->validate();
            $this->cirujano->update(
                ['documento' => $this->tipo_documento . $this->documento,
                    'nombre' => $this->nombre,
                    'genero' => $this->genero,
                    'activo' => $this->activo]
            );
            $mensaje = 'El cirujano: <strong> ' . $this->nombre . ' </strong> ha sido actualizada exitosamente';
            $this->emit('ev_msj_guardado', $mensaje);
            $this->resetear();
        }
    }
    /****************************/
    /**  RENDER                **/
    /****************************/
    public function render()
    {
        // $this->emit('ev_modal_test');
        $cirujanos = DB::table('cirujanos')
            ->where('cirujanos.activo', '!=', '0')
            ->select(
                'cirujanos.id',
                'cirujanos.documento',
                'cirujanos.nombre',
                'cirujanos.genero',
                'cirujanos.activo'
            )
            ->where(function ($query) {
                $query->where('cirujanos.genero', 'like', '%' . $this->buscador_cirujano . '%')
                    ->Orwhere('cirujanos.documento', 'like', '%' . $this->buscador_cirujano . '%')
                    ->Orwhere('cirujanos.nombre', 'like', '%' . $this->buscador_cirujano . '%')
                    ->Orwhere('cirujanos.activo', 'like', '%' . $this->buscador_cirujano . '%');
            })->orderBy($this->campo_orden, $this->ordenado)
            ->paginate($this->numero_cirujanos);
        $count_cirujanos_busqueda = $cirujanos->count();
        $count_cirujanos = DB::table('cirujanos')->where('cirujanos.activo', '!=', '0')->count();
        return view('livewire.cirujano.listado', compact('cirujanos', 'count_cirujanos_busqueda', 'count_cirujanos'));
    }
}
