import os
import jwt
import psycopg2
from psycopg2.extras import DictCursor
from fastapi import HTTPException, Depends, Header
from datetime import datetime
from pytz import timezone

API_KEY = os.getenv("API_KEY")
SESSION_KEY = os.getenv("SESSION_KEY")
DB_HOST = os.getenv("POSTGRES_HOST")
DB_PORT = os.getenv("POSTGRES_PORT")
DB_NAME = os.getenv("POSTGRES_DB")
DB_USER = os.getenv("POSTGRES_USER")
DB_PASS = os.getenv("POSTGRES_PASSWORD")
SAO_PAULO_TZ = timezone('America/Sao_Paulo')

def get_db_connection():
    try:
        return psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST, port=DB_PORT)
    except psycopg2.OperationalError as e:
        print(f"Erro ao conectar ao banco de dados: {e}")
        raise HTTPException(status_code=503, detail="Serviço de banco de dados indisponível.")
    


async def verify_api_key(x_api_key: str = Header(default=API_KEY, description="Chave de API.")):
    if x_api_key != API_KEY:
        raise HTTPException(status_code=401, detail="Chave de API inválida ou ausente.")
    
def to_sao_paulo_time(dt: datetime):
    """
    Um filtro Jinja2 para converter um datetime com fuso horário UTC
    para o fuso horário de São Paulo.
    """
    if not isinstance(dt, datetime):
        return dt
    
    return dt.astimezone(SAO_PAULO_TZ)
