CREATE OR REPLACE FUNCTION public.fn_admin_add_professor_assignment(p_course_id integer, p_professor_id bigint, p_level_id integer DEFAULT NULL::integer)
 RETURNS jsonb
 LANGUAGE plpgsql
AS $function$
DECLARE
    v_id int;
BEGIN
    IF EXISTS (
        SELECT 1 FROM public.course_professor_levels
        WHERE course_id = p_course_id
          AND professor_id = p_professor_id
          AND (level_id = p_level_id OR (level_id IS NULL AND p_level_id IS NULL))
    ) THEN
        RETURN jsonb_build_object('error', 'Esta asignación ya existe.');
    END IF;

    INSERT INTO public.course_professor_levels (course_id, professor_id, level_id)
    VALUES (p_course_id, p_professor_id, p_level_id)
    RETURNING id INTO v_id;

    RETURN jsonb_build_object('success', true, 'id', v_id);
END;
$function$
;
