import requests
from requests.auth import HTTPBasicAuth

def obter_parametros():
    """Coleta os parâmetros necessários através de input do usuário"""
    print("=== Gerador de Refresh Token - Bling API ===\n")
    
    print("Por favor, forneça as seguintes informações:")
    print("-" * 50)
    
    codigo = input("1. Código de Autorização: ").strip()
    redirect_uri = input("2. Redirect URI: ").strip()
    client_id = input("3. Client ID: ").strip()
    client_secret = input("4. Client Secret: ").strip()
    
    return {
        "code": codigo,
        "redirect_uri": redirect_uri,
        "client_id": client_id,
        "client_secret": client_secret
    }

def gerar_tokens(parametros):
    """Faz a requisição para obter os tokens"""
    url = "https://www.bling.com.br/Api/v3/oauth/token"

    payload = {
        "grant_type": "authorization_code",
        "code":  parametros["code"],
        "redirect_uri":  parametros["redirect_uri"],
    }

    client_id =  parametros["client_id"]
    client_secret =   parametros["client_secret"]
    
    print("\nEnviando requisição...")
    
    try:
        response = requests.post(
            url,
            data=payload,
            auth=HTTPBasicAuth(client_id, client_secret),
            headers={
                "Content-Type": "application/x-www-form-urlencoded",
                "Accept": "1.0",
            }
        )
        
        if response.status_code == 200:
            tokens = response.json()
            print("\n✅ Tokens gerados com sucesso!")
            print("-" * 50)
            print(f"Access Token: {tokens.get('access_token', 'N/A')}")
            print(f"Refresh Token: {tokens.get('refresh_token', 'N/A')}")
            print(f"Expires In: {tokens.get('expires_in', 'N/A')} segundos")
            print("-" * 50)
            return tokens
        else:
            print(f"\n❌ Erro na requisição: {response.status_code}")
            print(f"Resposta: {response.text}")
            return None
            
    except Exception as e:
        print(f"\n❌ Erro ao fazer requisição: {e}")
        return None

if __name__ == "__main__":
    parametros = obter_parametros()
    tokens = gerar_tokens(parametros)