<?php

namespace App\Http\Controllers;

use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Models\Mensaje;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;

class MensajeController extends Controller
{
    public function index()
    {
        $mensajes = Mensaje::all();
        return view('Mensajes.index')->with('mensajes', $mensajes);
    }
    
    public function create()
    {
        return view('Mensajes.create');
    }

    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'nombre'   => 'required|string|max:255',
            'apellido' => 'required|string|max:255',
            'correo'   => 'required|email|max:255',
            'telefono' => 'required|string|max:20',
            'mensaje'  => 'required|string',
        ]);

        try {
            Mensaje::create($validatedData);

            // Devolvemos JSON en lugar de una redirección
            return response()->json([
                'success' => true,
                'message' => '¡Mensaje enviado con éxito!'
            ]);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Error al enviar: ' . $e->getMessage()
            ], 500);
        }
    }

    // --- Mantenemos todas tus otras funciones originales ---

    public function edit(string $id)
    {
        $mensaje = Mensaje::find($id);
        if (!$mensaje) {
            return redirect()->route('Mensajes.index')->with('error', 'Mensaje no encontrado.');
        }
        $prevMessage = Mensaje::where('id', '<', $id)->orderBy('id', 'desc')->first();
        $nextMessage = Mensaje::where('id', '>', $id)->orderBy('id', 'asc')->first();
        $formattedDate = Carbon::parse($mensaje->created_at)->format('d M. Y h:i A');

        return view('Mensajes.edit', compact('mensaje', 'formattedDate', 'prevMessage', 'nextMessage'));
    }

    public function update(Request $request, $id)
    {
        $validatedData = $request->validate([
            'nombre' => 'required|string|max:255',
            'apellido' => 'required|string|max:255',
            'correo' => 'required|email|max:255',
            'telefono' => 'required|string|max:20',
            'mensaje' => 'required|string',
        ]);
        $mensaje = Mensaje::findOrFail($id);
        $mensaje->update($validatedData);
        return redirect()->route('Mensajes.index')->with('success', 'Mensaje actualizado correctamente.');
    }

    public function destroy($id)
    {
        try {
            $mensaje = Mensaje::findOrFail($id);
            $mensaje->delete();
            return redirect()->route('Mensajes.index')->with('success', 'Mensaje eliminado correctamente.');
        } catch (\Exception $e) {
            Log::error('Error al eliminar el mensaje: ' . $e->getMessage());
            return redirect()->route('Mensajes.index')->with('error', 'Error al eliminar el mensaje.');
        }
    }

    public function destroyMultiple(Request $request)
    {
        try {
            $ids = $request->input('message_ids'); 
            if (is_array($ids) && count($ids) > 0) {
                Mensaje::destroy($ids);
                return redirect('/Mensajes')->with('success', 'Mensajes eliminados correctamente.');
            }
            return redirect()->back()->with('error', 'No se seleccionaron mensajes.');
        } catch (\Exception $e) {
            return redirect()->back()->with('error', 'Error al eliminar mensajes.');
        }
    }

    public function refresh()
    {
        try {
            $mensajes = Mensaje::all(); 
            $chunks = $mensajes->chunk(10);
            $html = '';
            foreach ($chunks as $pageIndex => $chunk) {
                $html .= '<div class="table-responsive mailbox-messages page" id="page-' . ($pageIndex + 1) . '" style="display: ' . ($pageIndex == 0 ? 'block' : 'none') . ';">
                            <table class="table table-hover table-striped">
                                <tbody>';
                foreach ($chunk as $mensaje) {
                    $html .= '<tr>
                                <td><input type="checkbox" class="message-checkbox" value="' . $mensaje->id . '"></td>
                                <td class="mailbox-name"><a href="' . route('Mensajes.edit', $mensaje->id) . '">' . $mensaje->nombre . '</a></td>
                                <td class="mailbox-subject">' . Str::limit($mensaje->mensaje, 50, '...') . '</td>
                                <td class="mailbox-date">' . $mensaje->created_at->diffForHumans() . '</td>
                            </tr>';
                }
                $html .= '</tbody></table></div>';
            }
            return response()->json(['success' => true, 'html' => $html]);
        } catch (\Exception $e) {
            return response()->json(['success' => false, 'message' => $e->getMessage()]);
        }
    }

    public function countToday()
    {
        $todayCount = Mensaje::whereDate('created_at', Carbon::today())->count();
        return response()->json(['count' => $todayCount]);
    }
}