<?php

namespace App\Http\Livewire\Registro;

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

class Listado extends Component
{

    use WithPagination;
    /**REGISTRO**/
    public $registro;
    public $id_registro;
    public $codigo;
    public $documento;
    public $paciente;
    public $cirujano;
    public $intervencion;
    public $fecha_intervencion;
    protected $paginationTheme = 'bootstrap';
    public $buscador_registro;
    public $campo_orden = 'nombres';
    public $ordenado = 'desc';
    public $numeroregistros = 12;

    /****************************/
    /**  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([
            'registro',
            'id_registro',
            'codigo',
            'documento',
            'paciente',
            'cirujano',
            'intervencion',
            'fecha_intervencion'
        ]);
    }
    /****************************/
    /**  SELECCIONAR REGISTRO  **/
    /****************************/
    public function seleccionar_registro($_id)
    {
        $this->resetear(); 
        $this->registro = Registro::find($_id);
        $this->id_registro = $this->registro->id;
        $this->codigo  = $this->registro->codigo;
        $this->documento  = $this->registro->documento;
        $this->paciente   = $this->registro->nombres." ".$this->registro->apellidos;
        $this->cirujano  = $this->registro->cirujano->nombre;
        $this->intervencion  = $this->registro->intervencion->nombre;
        $this->fecha_intervencion =  $this->registro->fecha_iq;
    }
    /****************************/
    /**  ELIMINAR REGISTRO     **/
    /****************************/
    public function eliminar_registro()
    {
        $this->registro->activo = '0';
        $this->registro->save();
        $mensaje = 'El registro numero: <strong> ' . $this->codigo.' </strong> ha sido eliminado exitosamente';
        $this->emit('ev_cerrar_modal', 'modal_eliminar_registro');
        $this->emit('ev_msj_guardado', $mensaje);
        $this->resetear();  
    }
    /****************************/
    /**  ACTIVAR REGISTRO      **/
    /****************************/
    public function activar_registro()
    {
        $this->registro->update(['activo' => '1']);
        $mensaje = 'El registro numero: <strong> ' . $this->codigo.' </strong> ha sido activado exitosamente';
        $this->emit('ev_cerrar_modal', 'modal_activar_registro');
        $this->emit('ev_msj_guardado', $mensaje);
        $this->resetear();  
    }
    /****************************/
    /**  DESACTIVAR REGISTRO   **/
    /****************************/
    public function desactivar_registro()
    {
        $this->registro->update(['activo' => '2']);
        $mensaje = 'El registro numero: <strong> ' . $this->codigo.' </strong> ha sido desactivado exitosamente';
        $this->emit('ev_cerrar_modal', 'modal_desactivar_registro');
        $this->emit('ev_msj_guardado', $mensaje);
        $this->resetear();  
    }
    /****************************/
    /**  RENDER                **/
    /****************************/
    public function render()
    {
        // $this->emit('ev_modal_test');
        $registros = DB::table('registros')
            ->where('registros.activo', '!=', '0')
            ->join('tasas', 'tasas.id', '=', 'registros.tasa_id')
            ->join('cirujanos', 'cirujanos.id', '=', 'registros.cirujano_id')
            ->join('intervencions', 'intervencions.id', '=', 'registros.intervencion_id')
            ->join('anestesiologos', 'anestesiologos.id', '=', 'registros.anestesiologo_id')
            ->join('clinicas', 'clinicas.id', '=', 'intervencions.clinica_id')
            ->select(
                'registros.id',
                'registros.codigo',
                'registros.documento',
                'registros.nombres',
                'registros.apellidos',
                'registros.genero',
                'registros.fecha_nac',
                'registros.nro_factura',
                'registros.fecha_factura',
                'registros.status',
                'registros.monto',
                'registros.monto_pagado',
                'registros.monto_diferencia',
                'tasas.monto_tasa as monto_tasa',
                'cirujanos.nombre as cirujano',
                'anestesiologos.nombre as anestesiologo',
                'intervencions.nombre as intervencion',
                'clinicas.nombre as clinica',
                'registros.activo'
            )
            ->where(function ($query) {
                $query->where('registros.documento', 'like', '%' . $this->buscador_registro . '%')
                    ->Orwhere('registros.nombres', 'like', '%' . $this->buscador_registro . '%')
                    ->Orwhere('registros.apellidos', 'like', '%' . $this->buscador_registro . '%')
                    ->Orwhere('registros.nro_factura', 'like', '%' . $this->buscador_registro . '%')
                    ->Orwhere('registros.codigo', 'like', '%' . $this->buscador_registro . '%')
                    ->Orwhere('registros.fecha_factura', 'like', '%' . $this->buscador_registro . '%')
                    ->Orwhere('cirujanos.nombre', 'like', '%' . $this->buscador_registro . '%')
                    ->Orwhere('intervencions.nombre', 'like', '%' . $this->buscador_registro . '%');
            })->orderBy($this->campo_orden, $this->ordenado)
            ->paginate($this->numeroregistros);

        $count_registros_busqueda = $registros->count();
        $count_registros = DB::table('registros')->where('registros.activo', '!=', '0')->count();
    
            

        return view('livewire.registro.listado', compact('registros', 'count_registros', 'count_registros_busqueda'));
    }
}
