from database import db
from models.user import User


class AuthError(Exception):
    """Falha de autenticação/registro com mensagem amigável ao usuário."""


def find_or_create_google_user(userinfo):
    google_id = userinfo["sub"]
    email = userinfo["email"]
    name = userinfo.get("name", "")

    user = User.query.filter_by(google_id=google_id).first()
    if user:
        return user

    user = User.query.filter_by(email=email).first()
    if user:
        user.google_id = google_id
        db.session.commit()
        return user

    user = User(name=name, email=email, google_id=google_id)
    db.session.add(user)
    db.session.commit()
    return user


def register_user(name, email, password):
    """Cria um usuário com email/senha. Levanta AuthError se o email já existe."""
    email = (email or "").strip().lower()
    name = (name or "").strip()

    if not email or not password:
        raise AuthError("E-mail e senha são obrigatórios.")

    if User.query.filter_by(email=email).first():
        raise AuthError("Conta já criada com esse e-mail.")

    user = User(name=name, email=email)
    user.set_password(password)
    db.session.add(user)
    db.session.commit()
    return user


def authenticate_user(email, password):
    """Retorna o User se as credenciais conferem; senão levanta AuthError."""
    email = (email or "").strip().lower()
    user = User.query.filter_by(email=email).first()

    if user is None or not user.check_password(password):
        raise AuthError("E-mail ou senha inválidos.")

    return user
