CREATE OR REPLACE FUNCTION public.fn_admin_get_course_config(p_course_id integer)
RETURNS jsonb
LANGUAGE sql STABLE AS $$
  SELECT COALESCE(
    jsonb_object_agg(config_key, config_value),
    '{}'::jsonb
  )
  FROM public.course_config
  WHERE course_id = p_course_id;
$$;

CREATE OR REPLACE FUNCTION public.fn_admin_set_course_config(p_course_id integer, p_config jsonb)
RETURNS void
LANGUAGE plpgsql AS $$
BEGIN
  INSERT INTO public.course_config (course_id, config_key, config_value, updated_at)
  SELECT p_course_id, key, value, now()
  FROM jsonb_each_text(p_config)
  ON CONFLICT (course_id, config_key) DO UPDATE
    SET config_value = EXCLUDED.config_value,
        updated_at   = now();
END;
$$;

GRANT EXECUTE ON FUNCTION public.fn_admin_get_course_config(integer) TO "elfi1953_stc-eu";
GRANT EXECUTE ON FUNCTION public.fn_admin_set_course_config(integer, jsonb) TO "elfi1953_stc-eu";
