<?php

namespace App\Http\Controllers;

use App\Models\PaItemCatalogo;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;


class ModelosController extends Controller
{

    public function MantenimientoModelos()
    {
        return view('Mantenimiento.Vehiculos.modelos');
    }

    public function listarModelos()
    {
        try {
            //return datatables()->eloquent(CtVehiculos::where('estado', 'A'))->toJson();
            return datatables(DB::select("CALL sp_ListarModelos();"))->toJson();
            
        } catch (\Throwable $th) {
            Log::info($th);
        }
    }

    public function crearModelos(Request $r)
    {
        try {
            Log::info($r);
            
            $r->validate([
                'IdDetcatalogo' => 'required',
                'descricion' => 'required',
                'estado' => 'required',
                'CodigoCatalogo' => 'required',
            ]);
            //se aplica condicion para modal    
            if($r->IdPadre > 0 && $r->marca <= 0){
                //$r->marca = $r->IdPadre;
                $CodigoCatalogo = PaItemCatalogo::join('pa_catalogo', 'pa_catalogo.IdCatalogo', '=', 'pa_item_catalogo.IdCatalogo')
                ->where('pa_item_catalogo.IdDetcatalogo', $r->IdPadre)
                ->select('pa_item_catalogo.CodigoCatalogo')
                ->get();
                $r->marca = $CodigoCatalogo[0]->CodigoCatalogo;
            }
        } catch (\Throwable $th) {
            return response()->json([
                'status' => 'error',
                'success' => false,
                'message' => 'Debe llenar todos los campos son obligatorio.!!',
            ]);
        }
        try {
            $dameFecha = Carbon::now()->subHour(5);
            //verifiica que la marca no este registrada
            if ($r->IdDetcatalogo <= 0) {
                $contDataUsers = PaItemCatalogo::join('pa_catalogo', 'pa_item_catalogo.IdCatalogo', '=', 'pa_catalogo.IdCatalogo')
                    ->where('Descricion', trim($r->descricion))
                    ->where('pa_catalogo.NombreCatalogo', 'CO_MODELOS')
                    ->where('pa_catalogo.Estado', 'A')
                    ->count();
                if ($contDataUsers > 0) {
                    return response()->json([
                        'status' => 'error',
                        'success' => false,
                        'message' => 'El Modelo ' . $r->descricion . ' ya se encuentra registrado.!',
                    ]);
                }
            }

            //Guardar Vehiculo
            $dataModelo = new PaItemCatalogo();

            if ($r->IdDetcatalogo > 0) {
                $dataModelo = PaItemCatalogo::join('pa_catalogo', 'pa_item_catalogo.IdCatalogo', '=', 'pa_catalogo.IdCatalogo')
                    ->where('pa_catalogo.NombreCatalogo', 'CO_MODELOS')
                    ->where('pa_catalogo.Estado', 'A')
                    ->where('pa_item_catalogo.IdDetcatalogo', $r->IdDetcatalogo)
                    ->Select('pa_item_catalogo.*')
                    ->first();

                if ($dataModelo == null) {
                    return response()->json([
                        'status' => 'error',
                        'success' => true,
                        'message' => 'No se encuentra la Marca' . $r->descricion
                    ]);
                }
            }

            // $n_secuencial = PaItemCatalogo::max('pa_item_catalogo.CodigoCatalogo')
            //     ->join('pa_catalogo', 'pa_item_catalogo.IdCatalogo', '=', 'pa_catalogo.IdCatalogo')
            //     ->where('pa_catalogo.NombreCatalogo', 'CO_MODELOS')
            //     ->first();

            $n_secuencial = DB::table('pa_item_catalogo')
                ->join('pa_catalogo', 'pa_catalogo.IdCatalogo', '=', 'pa_item_catalogo.IdCatalogo')
                ->where('pa_catalogo.NombreCatalogo', 'CO_MODELOS')
                ->max('pa_item_catalogo.CodigoCatalogo');

            $dataModelo->IdCatalogo = 2;
            $dataModelo->CodigoCatalogo = ($r->IdDetcatalogo > 0 ? $r->CodigoCatalogo : $n_secuencial+1 );
            $dataModelo->Descricion = strtoupper($r->descricion);
            $dataModelo->IdPadre = ($r->IdDetcatalogo > 0 ? $r->IdPadre : $r->marca );
            $dataModelo->Estado = $r->estado;

            DB::beginTransaction();
            $dataModelo->save();
            
            DB::commit();

            //fin de la instruccion
            return response()->json([
                'status' => 'ok',
                'success' => true,
                'message' => 'El Modelo fue ' . ($r->IdDetcatalogo > 0 ? 'Modificado' : 'Creado') . ' con exito.!!'
            ]);

        } catch (\Throwable $th) {
            return response()->json([
                'status' => 'error',
                'success' => false,
                'message' => 'No se pudo guardar la marca ingresada!!',
            ]);
        }
    }
}
