from datetime import datetime

from app import db
from app.dao.dao_utils import autocommit
from app.models import WebauthnCredential


def dao_get_webauthn_credential_by_user_and_id(user_id, webauthn_credential_id):
    return WebauthnCredential.query.filter(
        WebauthnCredential.user_id == user_id, WebauthnCredential.id == webauthn_credential_id
    ).one()


@autocommit
def dao_create_webauthn_credential(
    *,
    user_id,
    name,
    credential_data,
    registration_response,
):
    webauthn_credential = WebauthnCredential(
        user_id=user_id, name=name, credential_data=credential_data, registration_response=registration_response
    )
    db.session.add(webauthn_credential)
    return webauthn_credential


@autocommit
def dao_update_webauthn_credential_name(webauthn_credential, new_name):
    webauthn_credential.name = new_name
    db.session.add(webauthn_credential)
    return webauthn_credential


@autocommit
def dao_update_webauthn_credential_logged_in_at(webauthn_credential):
    webauthn_credential.logged_in_at = datetime.utcnow()
    db.session.add(webauthn_credential)
    return webauthn_credential


@autocommit
def dao_delete_webauthn_credential(webauthn_credential):
    db.session.delete(webauthn_credential)
