import streamlit as st
from sqlalchemy import create_engine
import plotly_express as px

if sys.platform == "win32":
    sys.stdout.reconfigure(encoding='utf-8', errors='replace')
    sys.stderr.reconfigure(encoding='utf-8', errors='replace')

# Configurações do Banco
host = '127.0.0.1'
port = 5432
user = 'postgres'
password = 'ps@web'
dbname = 'bdps01'

try:
    password_encoded = quote_plus(password)
    url = f"postgresql+psycopg2://{user}:{password_encoded}@{host}:{port}/{dbname}"
    
    engine = create_engine(
        url, 
        connect_args={
            "client_encoding": "win1252"
        }
    )
    
    db = SQLDatabase(
        engine,
        include_tables=tabelas_permitidas,
        sample_rows_in_table_info=2,
        view_support=True
    )

def buscar_produto(termo: str = ""):
    """Consulta os produtos na tabela produtoia."""
    termo_limpo = termo.strip()
    try:
        conn = psycopg2.connect(**DB_CONFIG)
        conn.set_client_encoding('WIN1252')
        cursor = conn.cursor(cursor_factory=RealDictCursor)

        query = """
            SELECT filial, descricao_produto, data_nota, municipio  
            FROM vw_vendas_produtos_langchain, vw_clientes
            WHERE EXTRACT(YEAR FROM data_nota) = 2026
            AND vw_vendas_produtos_langchain.codigo_cliente =  vw_clientes.codigo_cliente
            ORDER BY data_nota
        """
        parametro = (f"%{termo_limpo}%",)

        # Usando mogrify com tratamento seguro de decode para o print no terminal
        try:
            query_bytes = cursor.mogrify(query, parametro)
            # O errors='replace' impede que o terminal quebre caso venha um byte isolado
            print("\n--- QUERY SENDO EXECUTADA ---")
            print(query_bytes.decode('utf-8', errors='replace'))
            print("-----------------------------\n")
        except Exception as err_print:
            print(f"Aviso: Não foi possível imprimir a query formatada: {err_print}")

        cursor.execute(query, parametro)
        produtos = cursor.fetchall()

        cursor.close()
        conn.close()
        return produtos
    except Exception as e:
        print(f"Erro na consulta SQL: {e}")
        return []

        st.set_page_config(layout="wide")
        month = st.sidebar.selectbox("Mês", df["Month"].unique{})

        df_filtered = df[df["Month"]== month]

        df_filtered 

        col1, col2 = st.colums(2)
        col3, col4, col5 = st.colums(3)

        fig_date = px.bar(df_filtered, x="Date", y="Total", color="municipio", title="Faturamento por Mês")
        col1.plotly_chart(fig_date)

 
