CREATE OR REPLACE FUNCTION public.fn_tutor_list_upcoming_sessions(p_partner_id bigint, p_course_id integer)
 RETURNS jsonb
 LANGUAGE plpgsql
AS $function$
DECLARE
  v_sessions jsonb;
BEGIN
  SELECT jsonb_agg(
    jsonb_build_object(
      'session_id',       s.session_id,
      'title',            s.title,
      'scheduled_at',     s.scheduled_at,
      'available',        s.scheduled_at > NOW() + INTERVAL '90 minutes',
      'already_enrolled', EXISTS (
        SELECT 1 FROM public.session_participants sp
        WHERE sp.session_id = s.session_id AND sp.partner_id = p_partner_id
      )
    ) ORDER BY s.scheduled_at ASC
  )
  INTO v_sessions
  FROM public.sessions s
  WHERE s.course_id = p_course_id
    AND s.status    = 'SCHEDULED';

  RETURN jsonb_build_object('sessions', COALESCE(v_sessions, '[]'::jsonb));
END;
$function$
;
