CREATE OR REPLACE FUNCTION public.fn_substitute_template(p_template text, p_context jsonb)
 RETURNS text
 LANGUAGE plpgsql
 IMMUTABLE
AS $function$
DECLARE
    v_result TEXT := p_template;
    v_key    TEXT;
    v_value  TEXT;
BEGIN
    IF p_template IS NULL OR p_context IS NULL THEN
        RETURN p_template;
    END IF;

    FOR v_key, v_value IN
        SELECT k, v FROM jsonb_each_text(p_context) AS t(k, v)
    LOOP
        v_result := REPLACE(v_result, '{{' || v_key || '}}', COALESCE(v_value, ''));
    END LOOP;

    RETURN v_result;
END;
$function$
;
