<?php

namespace App\Http\Controllers;

use App\Models\HtKilometraje;
use App\Models\TpMantenimiento;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;

class MantenimientoController extends Controller
{
    public function CreareMantenimiento(Request $r)
    {
        try {
            Log::info($r);
            $validator = Validator::make($r->all(), [
                'descripcion' => 'required',
                'idunidad' => 'required',
                'idente' => 'required',
                'kilometraje' => 'required',
            ]);
            if ($validator->fails()) {
                return response()->json([
                    'status' => 'error',
                    'message' => 'Debe llenar todos los campos son obligatorio.!!',

                ]);
            }
            $kilometrajeValido = $this->KilometrajeValido($r->idunidad, $r->kilometraje);
            if (!$kilometrajeValido) {
                return response()->json(['status' => 'error', 'message' => 'El kilometraje no puede ser menor al anterior.!!']);
            }
            $dameFecha = Carbon::now()->subHours(5);
            $dataMantenimiento = new TpMantenimiento();
            $dataMantenimiento->descripcion = $r->descripcion;
            $dataMantenimiento->estado = 'A';
            $dataMantenimiento->idunidad = $r->idunidad;
            $dataMantenimiento->usuario_ing = $r->idente;
            $dataMantenimiento->kilometraje = $r->kilometraje;
            $dataMantenimiento->kilometrajenew = $r->proximokm;
            $dataMantenimiento->fecha_ing = $dameFecha;
            $dataMantenimiento->save();

            return response()->json([
                'status' => 'ok',
                'message' => 'Mantenimiento fue creado con exito.!!',
                'idmantenimiento' => $dataMantenimiento->id
            ]);
        } catch (\Throwable $th) {
            Log::error($th->getMessage());
            return response()->json([
                'status' => 'error',
                'message' => 'Se presentaron inconvenientes al guardar la información'
            ]);
        }
    }
    public function InsertarComprobante(Request $r)
    {
        if ($r->archivo1 != null) {
            $path1 = $r->file('archivo1')->store('public/documentos/archivos');
        }
        TpMantenimiento::where('id', $r->id)
            ->update(['rutacomprobante' =>  $path1,]);
        return response()->json([
            'status' => 'ok',
            'message' => 'Mantenimiento fue creado con exito.!!',
        ]);
    }
    public function KilometrajeValido($idunidad, $kilometraje)
    {
        $valkilometraje = HtKilometraje::where('id_unidad_fk', $idunidad)->orderBy('id', 'DESC')->first();
        if ($valkilometraje != null) {
            if (floatval($kilometraje) <= floatval($valkilometraje->kilometraje)) {
                return false;
            }
        }
        return true;
    }
    public function ListaMantenimientos(Request $r)
    {
        $dataMantenimiento = DB::table('tp_mantenimiento')->join('ct_vehiculos', 'tp_mantenimiento.idunidad', 'ct_vehiculos.IdVehiculos')
            ->whereBetween('tp_mantenimiento.fecha_ing', [$r->fechadesde, $r->fechahasta])
            ->where('tp_mantenimiento.usuario_ing', $r->idusuario)
            ->where('tp_mantenimiento.idunidad', $r->idunidad)
            ->select(['ct_vehiculos.PlacaVehiculo', 'tp_mantenimiento.*'])
            ->get();

        return response()->json(['status' => 'ok', 'datos' => $dataMantenimiento]);
    }

    public function IndexMantenimiento()
    {
        $socios = $this->MuestraSocios();
        //return view('Mantenimiento.Vehiculos.infVehiculos', ['socios' => $socios]);
        return view('Mantenimiento.Vehiculos.infMantenimiento', ['socios' => $socios]);
    }
    public function IndexAsignaciones()
    {
        $socios = $this->MuestraSocios();
        return view('Mantenimiento.infasignacion', ['socios' => $socios]);
    }


    public function MuestraSocios()
    {
        $dataSocio = DB::table('co_socios')
            ->join('co_ente', 'co_socios.IdEnte', 'co_ente.id_ente')
            ->select(['co_socios.IdSocios', 'co_socios.IdEnte', DB::raw('concat(co_ente.p_primer_nombre," ",co_ente.p_primer_apellido) as nombre_completo')])
            ->get();
        return $dataSocio;
    }

    public function BucaListaMantenimiento(Request $r)
    {
        $dataMantenimiento = DB::table('tp_mantenimiento')->join('ct_vehiculos', 'tp_mantenimiento.idunidad', 'ct_vehiculos.IdVehiculos')
            ->whereBetween('tp_mantenimiento.fecha_ing', [$r->fechadesde, $r->fechahasta])
            ->where('tp_mantenimiento.usuario_ing', $r->usuario)
            ->select(['ct_vehiculos.PlacaVehiculo', 'ct_vehiculos.AnioVehiculo', 'tp_mantenimiento.*'])
            ->get();
        Log::info($dataMantenimiento);
        return response()->json(['status' => 'ok', 'datos' => $dataMantenimiento]);
    }
    public function BuscaAsignaciones(Request $r)
    {
        Log::info($r);
        $dataSalida = DB::table('salidaunidad')
            ->join('ct_vehiculos', 'salidaunidad.idunidad', 'ct_vehiculos.IdVehiculos')
            ->join('co_chofer', 'co_chofer.IdChofer', 'salidaunidad.idchofer')
            ->join('co_ente', 'co_chofer.IdEnte', 'co_ente.id_ente')
            ->whereBetween('salidaunidad.fecha_ing', [$r->fechadesde, $r->fechahasta])
            ->where('salidaunidad.usuario_ing', $r->usuario)
            ->where('salidaunidad.estado', 'P')
            ->select(['salidaunidad.id','co_ente.nombre_completo', 'ct_vehiculos.PlacaVehiculo', 'salidaunidad.id','salidaunidad.observacion', 'salidaunidad.kilometraje', 'salidaunidad.fecha_ing', 'salidaunidad.idunidad','salidaunidad.monto','salidaunidad.tipoalquiler'])->get();
            Log::info($dataSalida);
        return response()->json(['status' => 'ok', 'datos' =>  $dataSalida]);
    }
}
