<?php

namespace App\Http\Controllers;

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

class ItemController extends Controller
{
    public function MantenimientoServicios()
    {
        $tipo_item = 'S';
        return view('Mantenimiento.Items.servicios', ['tipo_item' => $tipo_item]);
    }

    public function MantenimientoRepuestos()
    {
        $tipo_item = 'R';
        return view('Mantenimiento.Items.servicios', ['tipo_item' => $tipo_item]);
    }

    public function listarItemsReparacion()
    {
        try {
            return datatables(
                DB::table('in_item')
                    ->where('estado', 'A')
                    ->where('tipo_item', 'R')
                    ->get()
            )->toJson();
        } catch (\Throwable $th) {
            Log::info($th);
        }
    }

    public function listarItemsServicios()
    {
        try {
            return datatables(
                DB::table('in_item')
                    ->where('estado', 'A')
                    ->where('tipo_item', 'S')
                    ->get()
            )->toJson();
        } catch (\Throwable $th) {
            Log::info($th);
        }
    }

    public function crearItems(Request $r)
    {
        Log::info($r);
        try {
            $r->validate([
                'id_item' => 'required',
                'tipo_item' => 'required',
                'descripcion' => 'required',
                'descripcion_larga' => 'required',
                'precio' => 'required',
                'estado' => 'required',
            ]);
        } catch (\Throwable $th) {
            return response()->json([
                'status' => 'error',
                'success' => false,
                'message' => 'Debe llenar todos los campos son obligatorio.!!',
            ]);
        }


        try {
            $dameFecha = Carbon::now()->subHour(5);
            Log::info($r);
            $tipoRegistro = ($r->tipo_item == 'S' ? 'Rubro' : 'Reparación');
            //verifiica que la marca no este registrada
            if ($r->id_item <= 0) {
                $contData = InItem::where('descripcion', trim($r->descripcion))
                    ->where('estado', 'A')
                    ->count();
                if ($contData > 0) {
                    return response()->json([
                        'status' => 'error',
                        'success' => false,
                        'message' => 'El ' . $tipoRegistro . ' ' . $r->descripcion . ' ya se encuentra registrado.!',
                    ]);
                }
            }

            //Guardar Item
            $dataItem = new InItem();

            if ($r->id_item > 0) {
                $dataItem = InItem::where('id_item', $r->id_item)
                    ->first();

                if ($dataItem == null) {
                    return response()->json([
                        'status' => 'error',
                        'success' => true,
                        'message' => 'No se encuentra el ' . $tipoRegistro . $r->descripcion
                    ]);
                }
            } else {
                $dataItem->fecha_ingreso = $dameFecha;
                $dataItem->tipo_item = $r->tipo_item;
                $dataItem->aud_ing_usuario = 'ADMIN';
                $dataItem->aud_ing_estacion = null;
                $dataItem->aud_ing_fecha_hora = $dameFecha;
            }

            $dataItem->descripcion = strtoupper($r->descripcion);
            $dataItem->descripcion_larga = strtoupper($r->descripcion_larga);
            $dataItem->precio = $r->precio;
            $dataItem->estado = $r->estado;
            $dataItem->aplica_iva = ($r->aplica_iva != null ? 'S' : 'N');


            DB::beginTransaction();
            $dataItem->save();

            DB::commit();

            //fin de la instruccion
            return response()->json([
                'status' => 'ok',
                'success' => true,
                'message' => '' . $tipoRegistro . ' fue ' . ($r->id_item > 0 ? 'Modificado' : 'Creado') . ' con exito.!!'
            ]);
        } catch (\Throwable $th) {
               DB::rollback();
            return response()->json([
                'status' => 'error',
                'success' => false,
                'message' => 'No se pudo guardar el ' . $tipoRegistro . ' ingresado verifique que no se encuentre registrado!!',
            ]);
        }
    }
}
