<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;

class AgendaController extends Controller
{
    public function store(Request $request)
    {

        // Buscar el id del usuario a partir del dni
        $user = DB::select('SELECT id FROM users WHERE username = ?', [$request->dni]);

        // Verificar si se encontró el usuario
        //if (!empty($user)) {
        $id_user = $user[0]->id;

        // Insertar los datos directamente en la base de datos usando SQL
        DB::insert('INSERT INTO agendamiento_llamadas 
            (nombre_cliente, numero_telefono, fecha_llamada, hora_llamada, motivo_llamada, notas_adicionales, created_at, updated_at, id_user) 
            VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW(), ?)',
            [
                $request->nombreCliente,
                $request->numeroTelefono,
                $request->fechaLlamada,
                $request->horaLlamada,
                $request->motivoLlamada,
                $request->notasAdicionales,
                $id_user

                //  Auth::user()->id // Pasa el ID de usuario directamente, sin corchetes
            ]
        );

        return response()->json(['message' => 'Llamada agendada correctamente'], 200);

    }
    public function store2(Request $request)
    {


        /* 
             // Insertar los datos directamente en la base de datos usando SQL
             DB::insert('INSERT INTO agendamiento_llamadas 
                 ( numero_telefono, fecha_llamada, hora_llamada, motivo_llamada, notas_adicionales, created_at, updated_at) 
                 VALUES (?, ?, ?, ?, ?, NOW(), NOW())', [
                     $request->numeroTelefono,
                     $request->fechaLlamada,
                     $request->horaLlamada,
                     $request->motivoLlamada,
                     $request->notasAdicionales,


                     //Auth::user()->id // Pasa el ID de usuario directamente, sin corchetes
                 ]
             );

             return response()->json(['message' => 'Llamada agendada correctamente'], 200); */



        // Insertar los datos directamente en la base de datos usando SQL
        DB::insert('INSERT INTO agendamiento_llamadas 
         ( numero_telefono, fecha_llamada, hora_llamada, motivo_llamada, notas_adicionales, created_at, updated_at,id_user) 
         VALUES ( ?, ?, ?, ?, ?, NOW(), NOW(),?)',
            [
                $request->numeroTelefono,
                $request->fechaLlamada,
                $request->horaLlamada,
                $request->motivoLlamada,
                $request->notasAdicionales,
                Auth::user()->id // Pasa el ID de usuario directamente, sin corchetes


            ]
        );


        return response()->json(['message' => 'Llamada agendada correctamente'], 200);

    }

    public function showToday()
    {
        // Obtener la fecha y el primer/último día del mes actual
        $hoy = Carbon::now('America/Lima')->format('Y-m-d'); // Ajusta la zona horaria

        $primerDiaMes = Carbon::now()->startOfMonth()->format('Y-m-d');
        $ultimoDiaMes = Carbon::now()->endOfMonth()->format('Y-m-d');

        // Consultar las llamadas para hoy
        $llamadasHoy = DB::select('SELECT * FROM agendamiento_llamadas WHERE fecha_llamada = ? AND id_user = ?', [$hoy, Auth::user()->id]);

        // Consultar las llamadas pasadas del mes actual
        $llamadasPasadas = DB::select('SELECT * FROM agendamiento_llamadas WHERE fecha_llamada < ? AND fecha_llamada >= ? AND id_user = ?', [$hoy, $primerDiaMes, Auth::user()->id]);

        // Consultar las llamadas futuras del mes actual
        $llamadasFuturas = DB::select('SELECT * FROM agendamiento_llamadas WHERE fecha_llamada > ? AND fecha_llamada <= ? AND id_user = ?', [$hoy, $ultimoDiaMes, Auth::user()->id]);

        // Retornar la vista con los resultados
        return view('view_agenda.agenda_view', compact('llamadasHoy', 'llamadasPasadas', 'llamadasFuturas'));
    }

    public function showTodayadmins()
    {
        // Obtener la fecha y el primer/último día del mes actual
        $hoy = Carbon::now('America/Lima')->format('Y-m-d'); // Ajusta la zona horaria

        $primerDiaMes = Carbon::now()->startOfMonth()->format('Y-m-d');
        $ultimoDiaMes = Carbon::now()->endOfMonth()->format('Y-m-d');

        // Consultar las llamadas para hoy
        $llamadasHoy = DB::select('SELECT * FROM agendamiento_llamadas WHERE fecha_llamada = ? ', [$hoy]);

        // Consultar las llamadas pasadas del mes actual
        $llamadasPasadas = DB::select('SELECT * FROM agendamiento_llamadas WHERE fecha_llamada < ? AND fecha_llamada >= ? ', [$hoy, $primerDiaMes]);

        // Consultar las llamadas futuras del mes actual
        $llamadasFuturas = DB::select('SELECT * FROM agendamiento_llamadas WHERE fecha_llamada > ? AND fecha_llamada <= ? ', [$hoy, $ultimoDiaMes]);

        // Retornar la vista con los resultados
        return view('view_agenda.agenda_view', compact('llamadasHoy', 'llamadasPasadas', 'llamadasFuturas'));
    }

    public function listarLlamadasHoy()
    {
        // $hoy = Carbon::now()->format('Y-m-d'); // Fecha actual en formato YYYY-MM-DD
        $hoy = Carbon::now('America/Lima')->format('Y-m-d');
        $llamadas = DB::select("SELECT id, nombre_cliente, numero_telefono, fecha_llamada, hora_llamada, motivo_llamada, notas_adicionales ,created_at
                            FROM agendamiento_llamadas 
                            WHERE DATE(created_at) = ?   AND id_user = ?", [$hoy, Auth::user()->id]);

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

    public function listarLlamadasHoyadmin()
    {
        $hoy = Carbon::now()->format('Y-m-d'); // Fecha actual en formato YYYY-MM-DD

        /*     $llamadas = DB::select("SELECT id, nombre_cliente, numero_telefono, fecha_llamada, hora_llamada, motivo_llamada, notas_adicionales ,created_at
                                    FROM agendamiento_llamadas 
                                    WHERE DATE(created_at) = ? ", [$hoy, Auth::user()->id]); */



        $userId = Auth::user()->id;

        // Consultar los roles del usuario
        $roles = DB::table('user_role')
            ->join('roles', 'user_role.id_roles', '=', 'roles.id')
            ->where('user_role.id_user', $userId)
            ->pluck('roles.role_name')
            ->toArray();

        // Lista de roles que pueden ver todas las llamadas
        $rolesPermitidos = ['SUPERVISOR', 'ADMINISTRATIVO', 'ROOT'];

        // Construir la consulta SQL
        $query = "SELECT 
                  agendamiento_llamadas.id,
                  agendamiento_llamadas.nombre_cliente,
                  agendamiento_llamadas.numero_telefono,
                  agendamiento_llamadas.fecha_llamada,
                  agendamiento_llamadas.hora_llamada,
                  agendamiento_llamadas.motivo_llamada,
                  agendamiento_llamadas.notas_adicionales,
                  agendamiento_llamadas.created_at,
                  agendamiento_llamadas.id_user,
                  users.name,
                  roles.role_name
              FROM agendamiento_llamadas
              INNER JOIN users ON agendamiento_llamadas.id_user = users.id
              INNER JOIN user_role ON user_role.id_user = users.id
              INNER JOIN roles ON user_role.id_roles = roles.id
              WHERE DATE(agendamiento_llamadas.created_at) = ?";

        // Si el usuario no tiene un rol permitido, agregar el filtro por usuario
        $bindings = [$hoy];
        if (!array_intersect($rolesPermitidos, $roles)) {
            $query .= " AND agendamiento_llamadas.id_user = ?";
            $bindings[] = $userId;
        }

        // Ejecutar la consulta
        $llamadas = DB::select($query, $bindings);



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

    public function eventost()
    {
        $ff = DB::table('agendamiento_llamadas')->get()->map(function ($e) {
            return [
                'title' => $e->numero_telefono,
                'start' => $e->fecha_llamada . 'T' . $e->hora_llamada,
            ];
        });
        return response()->json($ff);
    }
    public function datos()
    {        $userId = Auth::User()->id;

        $datos = DB::table('agendamiento_llamadas')
            ->select(
                'fecha_llamada',
                DB::raw("DATE_FORMAT(hora_llamada, '%H:%i') as hora_llamada"),
                'numero_telefono',
                'motivo_llamada',
                'notas_adicionales',
                'id'
            )
            ->where('id_user', $userId)

            ->orderBy('fecha_llamada', 'asc')
            ->orderBy('hora_llamada', 'asc')
            ->get();

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



    public function update(Request $request)
    {

        DB::table('agendamiento_llamadas')
            ->where('id', $request->id)
            ->update([
                'fecha_llamada'     => $request->fecha_llamada,
                'hora_llamada'      => $request->hora_llamada,
                'numero_telefono'   => $request->numero_telefono,
                'motivo_llamada'    => $request->motivo_llamada,
                'notas_adicionales' => $request->notas_adicionales
            ]);
    
        return response()->json(['ok' => true]);
    }
    

}
