"""Login OAuth das contas Google. Uso: uv run python -m agente.google_auth <pessoal|ita>"""
import os
import sys

from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow

from .config import CLIENTE_OAUTH, CONTAS_GOOGLE, SEGREDOS

PORTA = int(os.environ.get("PORTA_LOGIN", "8087"))


def arquivo_token(conta: str):
    return SEGREDOS / f"google-{conta}.json"


def credenciais(conta: str) -> Credentials:
    """Carrega o token salvo da conta, renovando-o se expirou."""
    caminho = arquivo_token(conta)
    cred = Credentials.from_authorized_user_file(caminho, CONTAS_GOOGLE[conta])
    if not cred.valid:
        cred.refresh(Request())
        caminho.write_text(cred.to_json())
    return cred


def login(conta: str):
    # o Google pode devolver escopos equivalentes com outro nome
    os.environ["OAUTHLIB_RELAX_TOKEN_SCOPE"] = "1"
    flow = InstalledAppFlow.from_client_secrets_file(CLIENTE_OAUTH, CONTAS_GOOGLE[conta])
    cred = flow.run_local_server(host="127.0.0.1", port=PORTA, open_browser=False,
                                 authorization_prompt_message="Abra este link: {url}",
                                 prompt="consent", access_type="offline")
    caminho = arquivo_token(conta)
    caminho.write_text(cred.to_json())
    caminho.chmod(0o600)
    print(f"ok: token salvo para a conta {conta}")


if __name__ == "__main__":
    login(sys.argv[1])
