<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Mail;
use App\Models\Asignacion;
use DB;
use Log;
use Carbon\Carbon;
use App\Mail\AlertaAsignacion;
use Yajra\DataTables\DataTables;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http; // Importa la clase Http

class asignacionEquipoController extends Controller
{

    public function NuevaAsignacion()
    {
        $proyectos = DB::table('proyectos')->where('proy_estado', '=', 'ACTIVO')->get();
        return view('asignaEquipoNuevo', compact('proyectos'));
    }

    public function ObtenerListaAsinganacionesJson(DataTables $dataTables)
    {
        $query = DB::table('asignaciones')
            ->select('asig_proyNombre', 'asig_TipoEquipo', 'asig_modelo', 'asig_numeroserie', 'asig_usuario', 'asig_estado', 'asig_observaciones', 'asig_id') // Selecciona solo las columnas necesarias
            ->orderBy('asig_id', 'desc');

        return $dataTables->query($query)
            ->addColumn('action', function ($item) {
                return '<a class="btn btn-info btn-sm" href="' . route('CargarAsginacion', $item->asig_id) . '"><i class="fas fa-pencil-alt"></i> Editar</a>';
            })
            ->rawColumns(['action']) // Indica que la columna 'action' contiene HTML
            ->make(true);
    }

    public function ListarAsignacionEquipos()
    {

        return view('asignaEquipoLista');
    }


    // public function ListarAsignacionEquipos(DataTables $dataTables)
    // {
    //     $query = DB::table('asignaciones')->orderBy('asig_id', 'desc');




    public function CargarAsginacion($id)
    {
        $asignacion = DB::table('asignaciones')->where('asig_id', $id)->first();
        return view('asignaEquipoEditar', compact('asignacion'));
    }

    public function GuardarAsignacion(Request $request)
    {

        $dataJQ = $request->all();
        $ResultadoTranssacion = false;

        try {
            DB::transaction(function () use ($dataJQ, &$ResultadoTranssacion) {
                $nuevoAsignacion = new Asignacion();
                $asig_fechaRegistro = Carbon::createFromFormat('m/d/Y', $dataJQ['asig_fechaRegistro']);

                $nuevoAsignacion->proy_id                    = $dataJQ['proy_id'];
                $nuevoAsignacion->asig_proyNombre            = $dataJQ['asig_proyNombre'];
                $nuevoAsignacion->tieq_id                    = 1;
                $nuevoAsignacion->asig_TipoEquipo            = $dataJQ['asig_TipoEquipo'];
                $nuevoAsignacion->asig_modelo                = $dataJQ['asig_modelo'];
                $nuevoAsignacion->equi_id                    = $dataJQ['equi_id'];
                $nuevoAsignacion->asig_numeroserie           = $dataJQ['asig_numeroserie'];
                $nuevoAsignacion->asig_area                  = $dataJQ['asig_area'];
                $nuevoAsignacion->asig_usuario               = $dataJQ['asig_usuario'];
                $nuevoAsignacion->asig_DNI                   = $dataJQ['asig_DNI'];
                $nuevoAsignacion->asig_accesorios            = $dataJQ['asig_accesorios'];
                $nuevoAsignacion->asig_medio                 = $dataJQ['asig_medio'];
                $nuevoAsignacion->asig_fechaRegistro         = $asig_fechaRegistro;
                $nuevoAsignacion->asig_observaciones         = $dataJQ['asig_observaciones'];
                $nuevoAsignacion->asig_lote                  = $dataJQ['asig_lote'];
                $nuevoAsignacion->asig_estado                = "ACTIVO";
                $nuevoAsignacion->asig_observacionesInternas = $dataJQ['asig_observacionesInternas'];
                $nuevoAsignacion->created_at                 = Carbon::now();
                $nuevoAsignacion->updated_at                 = Carbon::now();

                $affected = $nuevoAsignacion->save();

                if ($affected >= 1) {
                    $id = $dataJQ['equi_id'];

                    DB::table('equipos')
                        ->where('equi_id', $id)
                        ->update([
                            'equi_estadoAsigando' => "OCUPADO",
                            'equi_asiganadoActualA' => $dataJQ['asig_usuario'],
                            'equi_ubicacionActual' => $dataJQ['asig_proyNombre'],
                        ]);
                    $ResultadoTranssacion = true; // Actualizar $ResultadoTranssacion dentro de la transacción
                } else {
                    $ResultadoTranssacion = false; // Actualizar $ResultadoTranssacion dentro de la transacción
                }
            });
        } catch (Exception $e) {
            report($e);
            Log::info($e);
            // Manejar el error de forma más específica
            return response()->json(['error' => 'Error al guardar la asignación'], 500);
        }

        return response()->json($ResultadoTranssacion);
    }

    public function EditarAsignacion(Request $request)
    {

        $dataJQ = $request->all();
        $ResultadoTranssacion = false;
        //Log::info($dataJQ);

        try {

            $id = $dataJQ['asig_id'];

            $affected = DB::table('asignaciones')
                ->where('asig_id', $id)
                ->update([
                    'asig_accesorios'             => $dataJQ['asig_accesorios'],
                    'asig_observaciones'          => $dataJQ['asig_observaciones'],
                    'asig_observacionesInternas'  => $dataJQ['asig_observacionesInternas'],
                    'updated_at' => Carbon::now()
                ]);

            if ($affected >= 1) {
                $ResultadoTranssacion = true;
            } else {
                $ResultadoTranssacion = false;
            }
            Log::info($affected);
        } catch (Exception $e) {
            report($e);
            Log::info($e);
        }

        return response()->json($ResultadoTranssacion);
    }

    public function LiberarAsignacion(Request $request)
    {

        $dataJQ = $request->all();
        $ResultadoTranssacion = false;
        //Log::info($dataJQ);

        try {

            $id = $dataJQ['asig_id'];
            $asignacion = DB::table('asignaciones')->where('asig_id', $id)->get();

            $equi_serie = $asignacion[0]->asig_numeroserie;


            $affectedE = DB::table('equipos')
                ->where('equi_serie', $equi_serie)
                ->update([
                    'equi_estadoAsigando'   => "LIBRE",
                    'equi_asiganadoActualA' => "LIBRE",
                    'equi_ubicacionActual'  => "LIBRE",
                    'updated_at' => Carbon::now()
                ]);

            $affectedA = DB::table('asignaciones')
                ->where('asig_id', $id)
                ->update([
                    'asig_estado'   => "CERRADO",
                    'asig_fechaFin' => Carbon::now(),
                    'updated_at' => Carbon::now()
                ]);

            if ($affectedE >= 1 && $affectedA >= 1) {
                $ResultadoTranssacion = true;
            } else {
                $ResultadoTranssacion = false;
            }
            //Log::info($affected);

        } catch (Exception $e) {
            report($e);
            Log::info($e);
        }

        return response()->json($ResultadoTranssacion);
    }

    // public function EnviarAlertaAsignacion(Request $request)
    // {
    //     $ResultadoTranssacion = false;
    //     $dataJQ = $request->all();
    //     $id = $dataJQ['asig_id'];
    //     $correo = $dataJQ['correo'];

    //     $asignacion = DB::table('asignaciones')->where('asig_id', $id)->get();
    //     $TotalFilas = count($asignacion);

    //     if ($TotalFilas >= 1) {
    //         //Log::info($correo);
    //         Mail::to($correo)
    //             ->cc('team.ti@crubher.com')
    //             ->send(new AlertaAsignacion($asignacion));
    //         $ResultadoTranssacion = true;
    //     }

    //     return response()->json($ResultadoTranssacion);

    //     //Log::info($asignacion);
    //     //return view('asignaEquipoEditar', compact('asignacion'));
    //     //$name = 'Bob';
    //     //Mail::to('max.palli@crubher.com')->send(new AlertaAsignacion($asignacion));         



    // }

    public function EnviarAlertaAsignacion(Request $request)
    {
        $dataJQ = $request->all();
        $id = $dataJQ['asig_id'];
        $correo = $dataJQ['correo'];

        // Obtener los datos de la asignación (asumiendo que tienes un modelo Asignacion)
        $asignacion = Asignacion::find($id);

        Log::info('ANTES DEL IF');
                


        if ($asignacion) {
            // Construir la URL de la API
            $apiUrl = 'http://cordillerablancaminerals.com/api-email-laravel/public/api/enviar-correo';

            // Construir los datos para la solicitud
            $data = [
                'cod_interno' => (string)$asignacion->asig_id, // Reemplaza con los campos de tu modelo
                'proyecto' => $asignacion->asig_proyNombre,
                'tipo_equipo' => $asignacion->asig_TipoEquipo,
                'modelo' => $asignacion->asig_modelo,
                'nro_serie' => $asignacion->asig_numeroserie,
                'area' => $asignacion->asig_area,
                'usuario' => $asignacion->asig_usuario,
                'accesorios' => $asignacion->asig_accesorios,
                't_entrega' => $asignacion->asig_medio,
                'fecha' => $asignacion->asig_fechaRegistro,
                'observaciones' => $asignacion->asig_observaciones,
                'nro_lote' => $asignacion->asig_lote,
                'correo' => $correo,
            ];
            Log::info($data);

            // Enviar la solicitud a la API
            $response = Http::post($apiUrl, $data);

            // Verificar la respuesta de la API
            if ($response->successful()) {
                Log::info('200');
                Log::info($response);
                return response()->json(['message' => 'Correo electrónico enviado correctamente'], 200);
                
            } else {
                Log::info('500');
                Log::info($response);
                return response()->json(['message' => 'Error al enviar el correo electrónico'], 500);
            }
        } else {
            return response()->json(['message' => 'Asignación no encontrada'], 404);
        }
    }
}
