<?php

namespace App\Http\Controllers;

use App\Models\CoChofer;
use App\Models\CoDocumentoPersona;
use App\Models\CoEnte;
use App\Models\CtVehiculos;
use App\Models\Nacionalidad;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class ChoferController extends Controller
{

    public function ListarChoferes(Request $r)
    {
        try {
            $Choferes = DB::table('co_chofer As c')
                ->join('co_ente As e', 'c.idEnte', '=', 'e.id_ente')
                ->where('c.Activo', $r->estado)
                ->where('c.UsuarioCreacion', $r->aud_ing_usuario)
                ->whereRaw('DATE_FORMAT(c.FechaCreacion, "%Y-%m-%d") = DATE_FORMAT("' . $r->aud_ing_fecha . '", "%Y-%m-%d")')
                ->select("e.*")
                ->get();

            return response()->json([
                'status' => 'ok',
                'success' => true,
                'object' => $Choferes
            ]);
        } catch (\Throwable $th) {
            return response()->json([
                'status' => 'error',
                'success' => false,
                'data' => null
            ]);
        }
    }

    //
    public function crearChofer(Request $r)
    {
        $dameFecha = Carbon::now()->subHour(5);
        try {
            $contDataUsers = CoEnte::where('num_docum_iden', trim($r->num_docum_iden))->where('Activo', 'A')->count();
            if ($contDataUsers > 0) {
                return response()->json([
                    'status' => 'error',
                    'message' => 'el numero de identificacion ' . $r->num_docum_iden . 'ya se encuentra registrada.!',
                ]);
            }
            $consultaCorreo = CoEnte::where('p_correo', $r->p_correo)->where('Activo', 'A')->count();

            if ($consultaCorreo > 0) {
                return response()->json([
                    'status' => 'error',
                    'message' => 'El correo ingresado ya se encuentra registrado.!',
                ]);
            }
            $dataCoente = new CoEnte();
            $dataCoente->aud_ing_fecha_hora = $dameFecha;
            $dataCoente->aud_ing_usuario = $r->aud_ing_usuario;
            $dataCoente->nombre_completo = $r->nombre_completo;
            $dataCoente->num_docum_iden = $r->num_docum_iden;
            $dataCoente->p_primer_nombre =  $r->nombre_completo;
            $dataCoente->p_segundo_nombre = '';
            $dataCoente->p_primer_apellido = $r->p_primer_apellido;
            $dataCoente->p_segundo_apellido = '';
            $dataCoente->p_sexo = $r->p_sexo;
            $dataCoente->activo = $r->activo;
            $dataCoente->p_estado_civil = $r->p_estado_civil;
            $dataCoente->p_direccion = $r->p_direccion;
            $dataCoente->p_correo = $r->p_correo;
            $dataCoente->p_telefono = $r->p_telefono;
            $dataCoente->p_fecha_nacimiento = $r->p_fecha_nacimiento;
            $dataCoente->p_nacionalidad = 1; 
            $dataCoente->observacion = $r->observacion;
            $dataCoente->actividad = '';
            $dataCoente->pagina_web = '';
            $dataCoente->verificado = 'S';
            $dataCoente->tipo_ente = 'P';
            $dataCoente->stamp = $dameFecha;
            DB::beginTransaction();
            $dataCoente->save();

            $datSocio = new CoChofer();
            $datSocio->UsuarioCreacion = $r->aud_ing_usuario;
            $datSocio->FechaCreacion = $dameFecha;
            $datSocio->IdEnte = $dataCoente->id_ente;
            $datSocio->Activo = $r->activo;
            $datSocio->EstacionCreacion = 'L';
            $datSocio->tipoLicencia =  $r->p_tipolicencia;
            $datSocio->save();

            $dataDocumentoPersona = new CoDocumentoPersona();
            $dataDocumentoPersona->IdPersona = $dataCoente->id_ente;
            $dataDocumentoPersona->RutaIdentificacion = '';
            $dataDocumentoPersona->RutaLicencia = '';
            $dataDocumentoPersona->RutaAntecedentes = '';
            $dataDocumentoPersona->Estado = $r->activo;
            $dataDocumentoPersona->UsuarioCreacion = $r->aud_ing_usuario;
            $dataDocumentoPersona->FechaCreacion = $dameFecha;
            $dataDocumentoPersona->save();

            DB::commit();
            return response()->json([
                'status' => 'ok',
                'message' => 'El chofer fue creado con exito.!!',
                'iddocumento' => $dataDocumentoPersona->IdDocumentacion
            ]);
        } catch (\Throwable $th) {
            DB::rollback();
            return response()->json([
                'status' => 'error',
                'message' => 'Se presentaron inconvenientes al guardar la información'
            ]);
        }
    }

    public function ListarNacionalida()
    {
        $dataNacionalidad = Nacionalidad::get();
        return response()->json(['status' => 'ok', 'nacionalidades' => $dataNacionalidad]);
    }

    public function InsertarDocumentos(Request $r)
    {
        try {
            if ($r->archivo1 == null && $r->archivo2 == null && $r->archivo3 == null) {
                return response()->json([
                    'status' => 'error',
                    'message' => 'Los documentos son obligatorios.!!',
                ]);
            }

            $path1 = $r->file('archivo1')->store('public/documentos/archivos');
            $path2 = $r->file('archivo2')->store('public/documentos/archivos');
            $path3 = $r->file('archivo3')->store('public/documentos/archivos');

            CoDocumentoPersona::where('IdDocumentacion', $r->id)
                ->update(['RutaLicencia' =>  $path2, 'RutaIdentificacion' =>  $path1, 'RutaAntecedentes' =>  $path3,]);

            return response()->json([
                'status' => 'ok',
                'message' => 'Documentos Ingresada con exito.!!'
            ]);
        } catch (\Throwable $th) {
            return response()->json([
                'status' => 'error',
                'message' => 'Se presentaron inconvenientes al guardar la informaci��n'
            ]);
        }
    }

    public function ActualizarImagenes(Request $r)
    {
        try {
            $dataChofer = CoChofer::where('IdChofer', $r->idchofer)->first();
            $ObjDoc = CoDocumentoPersona::where('IdPersona', $dataChofer->IdEnte)->first();
            $path1 = $ObjDoc->RutaIdentificacion;
            $path2 = $ObjDoc->RutaLicencia;
            $path3 = $ObjDoc->RutaAntecedentes;
            if ($r->archivo1 != null) {
                $path1 = $r->file('archivo1')->store('public/documentos/archivos');
            }
            if ($r->archivo2 != null) {
                $path2 = $r->file('archivo2')->store('public/documentos/archivos');
            }
            if ($r->archivo3 != null) {
                $path3 = $r->file('archivo3')->store('public/documentos/archivos');
            }
            $ObjDoc->RutaIdentificacion = $path1;
            $ObjDoc->RutaLicencia = $path2;
            $ObjDoc->RutaAntecedentes = $path3;
            $ObjDoc->save();

            return response()->json([
                'status' => 'ok',
                'message' => 'Documentos Ingresada con exito.!!'
            ]);
        } catch (\Throwable $th) {
          
            return response()->json([
                'status' => 'error',
                'message' => 'Se presentaron inconvenientes al guardar la informaci��n'
            ]);
        }
    }

    public function ActualizarChofer(Request $r)
    {
        $dameFecha = Carbon::now()->subHour(5);
        try {
            $dataChofer = CoChofer::where('IdChofer', $r->IdChofer)->first();
            $dataCoente = CoEnte::where('id_ente', $dataChofer->IdEnte)->first();
            //modificar chofer
            $dataChofer->FechaModificacion = $dameFecha;
            $dataChofer->Activo = $r->activo;
            DB::beginTransaction();
            $dataChofer->save();
            //setea datos de auditoria modificacion
            $dataCoente->aud_mod_usuario = $r->aud_ing_usuario;
            $dataCoente->aud_mod_fecha_hora = $dameFecha;

            $dataCoente->activo = $r->activo;
            $dataCoente->p_estado_civil = $r->p_estado_civil;
            $dataCoente->save();



            DB::commit();
            return response()->json([
                'status' => 'ok',
                'message' => 'El chofer fue actualizado con exito.!!',
            ]);
        } catch (\Throwable $th) {
            DB::rollback();
           
            return response()->json([
                'status' => 'error',
                'message' => 'Se presentaron inconvenientes al guardar la informaci��n'
            ]);
        }
    }

    public function InformeChoferes(Request $r)
    {
        try {
            if ($r->estado == 'T') {
                $dataChofer = DB::table('co_chofer')
                    ->join('co_ente', 'co_chofer.IdEnte', 'co_ente.id_ente')
                    ->select([
                        'co_ente.id_ente', 'co_chofer.IdChofer',
                        'co_ente.nombre_completo', 'co_ente.activo', 'co_ente.num_docum_iden',
                        'co_ente.p_sexo', 'co_ente.p_estado_civil', 'co_ente.p_fecha_nacimiento',
                        'co_ente.p_direccion', 'co_ente.p_telefono', 'co_ente.p_celular', 'co_ente.p_correo', 'co_ente.tipolicencia', 'co_ente.aud_ing_fecha_hora'
                    ])
                    ->whereBetween('aud_ing_fecha_hora', [$r->fechadesde, $r->fechahasta])
                    ->where('co_ente.aud_ing_usuario', $r->id)
                    ->get();
                return response()->json([
                    'status' => 'ok',
                    'message' => '',
                    'data' =>  $dataChofer,
                ]);
            }
            //$dataChofer=CoChofer::where();
            $dataChofer = DB::table('co_chofer')
                ->join('co_ente', 'co_chofer.IdEnte', 'co_ente.id_ente')
                ->select([
                    'co_ente.id_ente', 'co_chofer.IdChofer',
                    'co_ente.nombre_completo', 'co_ente.activo', 'co_ente.num_docum_iden',
                    'co_ente.p_sexo', 'co_ente.p_estado_civil', 'co_ente.p_fecha_nacimiento',
                    'co_ente.p_direccion', 'co_ente.p_telefono', 'co_ente.p_celular', 'co_ente.p_correo', 'co_ente.tipolicencia', 'co_ente.aud_ing_fecha_hora'
                ])
                ->whereBetween('aud_ing_fecha_hora', [$r->fechadesde, $r->fechahasta])
                ->where('co_ente.aud_ing_usuario', $r->id)
                ->where('co_ente.activo', $r->estado)
                ->get();
            return response()->json([
                'status' => 'ok',
                'message' => '',
                'data' =>  $dataChofer,
            ]);
        } catch (\Throwable $th) {
            return response()->json([
                'status' => 'error',
                'message' => $th->getMessage(),
                'data' =>  null,
            ]);
        }
    }

    public function ListadoChoferesSinAsignacion($id)
    {
        $dataChofer = DB::table('co_chofer')
            ->join('co_ente', 'co_chofer.IdEnte', 'co_ente.id_ente')
            ->select([
                'co_ente.id_ente', 'co_chofer.IdChofer',
                'co_ente.nombre_completo',
                'co_ente.activo', 'co_ente.num_docum_iden',
                'co_ente.p_sexo', 'co_ente.p_estado_civil', 'co_ente.p_fecha_nacimiento',
                'co_ente.p_direccion', 'co_ente.p_telefono', 'co_ente.p_celular',
                'co_ente.p_correo', 'co_ente.tipolicencia', 'co_ente.aud_ing_fecha_hora'
            ])
            ->where('co_ente.aud_ing_usuario', $id)
            ->where('co_chofer.activo', 'S')
            ->get();
        return response()->json([
            'status' => 'ok',
            'message' => '',
            'data' =>  $dataChofer,
        ]);
    }



    public function ListaChoferesDisponibles($id)
    {
        $dataChofer = DB::table('co_chofer')
            ->join('co_ente', 'co_chofer.IdEnte', 'co_ente.id_ente')
            ->select([
                'co_ente.id_ente', 'co_chofer.IdChofer',
                'co_ente.nombre_completo',
                'co_ente.activo', 'co_ente.num_docum_iden',
                'co_ente.p_sexo', 'co_ente.p_estado_civil', 'co_ente.p_fecha_nacimiento',
                'co_ente.p_direccion', 'co_ente.p_telefono', 'co_ente.p_celular',
                'co_ente.p_correo', 'co_ente.tipolicencia', 'co_ente.aud_ing_fecha_hora'
            ])
            ->where('co_ente.aud_ing_usuario', $id)
            ->where('co_chofer.EstacionCreacion', 'L')
            ->where('co_chofer.activo', 'S')
            ->get();
        return response()->json([
            'status' => 'ok',
            'message' => '',
            'data' =>  $dataChofer,
        ]);
    }


    public function ListadoChoferes($id)
    {
        try {
            $dataChofer = DB::table('co_chofer')
                ->join('co_ente', 'co_chofer.IdEnte', 'co_ente.id_ente')
                ->select([
                    'co_ente.id_ente', 'co_chofer.IdChofer',
                    'co_ente.nombre_completo', 'co_ente.activo', 'co_ente.num_docum_iden',
                    'co_ente.p_sexo', 'co_ente.p_estado_civil', 'co_ente.p_fecha_nacimiento',
                    'co_ente.p_direccion', 'co_ente.p_telefono', 'co_ente.p_celular', 'co_ente.p_correo', 'co_ente.tipolicencia', 'co_ente.aud_ing_fecha_hora'
                ])
                ->where('co_ente.aud_ing_usuario', $id)
                ->get();
            return response()->json([
                'status' => 'ok',
                'message' => '',
                'data' =>  $dataChofer,
            ]);
        } catch (\Throwable $th) {
            return response()->json([
                'status' => 'error',
                'message' => $th->getMessage(),
                'data' =>  null,
            ]);
        }
    }
}
