create or replace procedure proc_26ai_llm_chart(p_session_id in number,
                                           p_user_name in varchar2, 
                                           p_prompt in varchar2,
                                           p_conv_id in number
                                           )
as
/*

  Criado por: fernando.leal@oracle.com
  Data: Oct/2025
  Objetivo: demonstrar casos de uso do Oracle AI Database 26ai

  v1 - graficos em componente de chat - leal

*/
/*
SELECT 
    jt.X,
    jt.Y
FROM TB_CHART d,
     JSON_TABLE(
       d.RUNSQL, '$[*]'
       COLUMNS (
         x VARCHAR2(50) PATH '$.X',
         y        NUMBER       PATH '$.Y'
       )
     ) jt
where session_id = :app_session
and conv_id = :P37_CONV_ID

*/
  v_context clob;
  v_response clob;
  v_conv_id number;
  v_showsql clob;
  v_runsql clob;
  v_title clob;
  v_debug varchar2(1) default 'Y';
  -- create table tb_chart_test2 ( title varchar2(200), runsql clob )
  v_profile_selectai varchar2(200) := 'PROF_TELECOM_V1';
  v_prompt varchar2(32000);
begin

    v_prompt := 'Você é um especialista em Oracle SQL.' || 
    ' Crie um comando para que seja possível montar um gráfico, trazendo apenas 2 colunas, que assegure existir dados para eixo X e dados para eixo Y.' ||
    ' REGRA: NUNCA use o nome das colunas, use sempre X e Y. Procure associar ao eixo X e Y as informacoes mais importantes para que o gráfico agregue insigths do negócio.' ||
    ' Exemplo 1: "Faça um grafico da evolução de venda de produtos" . O eixo X deve ter o nome dos produtos, e eixo Y o total de vendas.' ||
    ' Exemplo 2: "Faça um grafico sobre reclamacoes realizadas? Eixo X tem as reclamacoes agrupdas com GROUP BY e eixo Y a quantidade encontrada com COUNT' ||
    ' Prompt: ' || p_prompt;

    SELECT DBMS_CLOUD_AI.GENERATE(prompt => v_prompt,
       profile_name => v_profile_selectai,
       action       => 'runsql') response
      into v_runsql ;
      
    if v_debug = 'Y' then
    
        SELECT DBMS_CLOUD_AI.GENERATE(prompt => v_prompt,
          profile_name => v_profile_selectai,
          action       => 'showsql') response
        into v_showsql ;
      
    end if;  
      
    SELECT DBMS_CLOUD_AI.GENERATE(prompt => 'Qual melhor título para um gráfico que será gerado por este prompt: ' || p_prompt || '.' || 
       'REGRAS: máximo permitido são 6 palavras. Seja claro e o mais sucinto possível. RETORNE apenas o título. Não de nenhuma outra explicacação.',       
       profile_name => v_profile_selectai,
       action       => 'chat') response
      into v_title ;   
      
      delete "TB_26AI_CHART" 
      where SESSION_ID = p_session_id
      and conv_id = p_conv_id;
      
      insert into "TB_26AI_CHART" 
      values(p_session_id, 
            p_user_name, 
            sysdate,
            v_title,
            v_runsql,
            v_showsql,
            p_conv_id,
            null);
      commit;
end;
/