<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\UserNotification;
use Illuminate\Support\Facades\Auth;
use App\Jobs\SendNewClientEmail;
use App\Jobs\SendNewFeaturesAnnouncement;

class NotificationController extends Controller
{
    /**
     * Mostrar la lista de notificaciones del usuario autenticado
     *
     * @return \Illuminate\View\View
     */
    public function index()
    {
        $notifications = UserNotification::where('user_id', Auth::id())
            ->orderBy('created_at', 'desc')
            ->paginate(15);
            
        return view('notifications.index', [
            'notifications' => $notifications
        ]);
    }

    public function sendWelcomeEmail(){
        SendNewClientEmail::dispatch();
    }
    
    public function sendNewFeaturesAnnouncement(){
        SendNewFeaturesAnnouncement::dispatch();
    }   
    
    /**
     * Marcar una notificación específica como leída
     *
     * @param  int  $id
     * @return \Illuminate\Http\RedirectResponse
     */
    public function markAsRead($id)
    {
        $notification = UserNotification::findOrFail($id);
        
        // Verificar que la notificación pertenezca al usuario
        if ($notification->user_id !== Auth::id()) {
            abort(403);
        }
        
        $notification->markAsRead();
        
        // Si la notificación tiene un enlace, redirigir allí
        if ($notification->link) {
            return redirect($notification->link);
        }
        
        return redirect()->back()->with('success', 'Notificación marcada como leída');
    }
    
    /**
     * Marcar todas las notificaciones del usuario como leídas
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    public function markAllAsRead()
    {
        UserNotification::where('user_id', Auth::id())
            ->whereNull('read_at')
            ->update(['read_at' => now()]);
            
        return redirect()->back()->with('success', 'Todas las notificaciones han sido marcadas como leídas');
    }
    
    /**
     * Obtener el contador de notificaciones no leídas para el usuario actual (para AJAX)
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function getUnreadCount(Request $request)
    {
        if($request->ajax()){
            $count = UserNotification::where('user_id', Auth::id())
            ->whereNull('read_at')
            ->count();
            
            return response()->json(['count' => $count]);
        }else{
            return redirect()->route('/admin/login');
        }
    }
    
    /**
     * Eliminar una notificación
     *
     * @param  int  $id
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy($id)
    {
        $notification = UserNotification::findOrFail($id);
        
        // Verificar que la notificación pertenezca al usuario
        if ($notification->user_id !== Auth::id()) {
            abort(403);
        }
        
        $notification->delete();
        
        return redirect()->back()->with('success', 'Notificación eliminada correctamente');
    }
}
