<?php

namespace App\Services;

use Illuminate\Support\Facades\DB;

class NotificacionService
{
    /**
     * Notificar a todos los estudiantes matriculados en un curso y sección específicos
     */
    public static function notificarEstudiantesDeCurso($cursoId, $seccionId, $periodoId, $mensaje, $tipo = 'academico', $url = null)
    {
        // 1. Obtener horario
        $horarioId = DB::table('horarios')
            ->where('id_curso', $cursoId)
            ->when($seccionId, fn($q) => $q->where('id_seccion', $seccionId))
            ->when($periodoId, fn($q) => $q->where('id_periodo', $periodoId))
            ->value('id');

        if (!$horarioId) return;

        // 2. Obtener los usuario_id de los estudiantes matriculados
        $usuariosEstudiantes = DB::table('matricula_cursos as mc')
            ->join('matriculas as m', 'm.id', '=', 'mc.matricula_id')
            ->join('postulantes as p', 'p.id_postulante', '=', 'm.postulante_id')
            ->where('mc.horario_id', $horarioId)
            ->whereNotNull('p.usuario_id')
            ->pluck('p.usuario_id');

        // 3. Insertar notificación para cada uno
        $inserts = [];
        $ahora = now();
        foreach ($usuariosEstudiantes as $uId) {
            $inserts[] = [
                'usuario_id' => $uId,
                'mensaje'    => $mensaje,
                'tipo'       => $tipo,
                'url'        => $url,
                'leido'      => 0,
                'fecha'      => $ahora,
                'created_at' => $ahora,
                'updated_at' => $ahora,
            ];
        }

        if (!empty($inserts)) {
            DB::table('notificaciones')->insert($inserts);
        }
    }

    /**
     * Notificar a un solo estudiante (ej. cuando se le califica una tarea o nota individual)
     */
    public static function notificarEstudiante($postulanteId, $mensaje, $tipo = 'notas', $url = null)
    {
        $usuarioId = DB::table('postulantes')->where('id_postulante', $postulanteId)->value('usuario_id');
        if (!$usuarioId) return;

        DB::table('notificaciones')->insert([
            'usuario_id' => $usuarioId,
            'mensaje'    => $mensaje,
            'tipo'       => $tipo,
            'url'        => $url,
            'leido'      => 0,
            'fecha'      => now(),
            'created_at' => now(),
            'updated_at' => now(),
        ]);
    }
}