from enum import Enum
from typing import Optional

from app.models import Alias, AliasAuditLog


class AliasAuditLogAction(Enum):
    CreateAlias = "create"
    ChangeAliasStatus = "change_status"
    DeleteAlias = "delete"
    UpdateAlias = "update"

    InitiateTransferAlias = "initiate_transfer_alias"
    AcceptTransferAlias = "accept_transfer_alias"
    TransferredAlias = "transferred_alias"

    ChangedMailboxes = "changed_mailboxes"

    CreateContact = "create_contact"
    UpdateContact = "update_contact"
    DeleteContact = "delete_contact"


def emit_alias_audit_log(
    alias: Alias,
    action: AliasAuditLogAction,
    message: str,
    user_id: Optional[int] = None,
    commit: bool = False,
):
    AliasAuditLog.create(
        user_id=user_id or alias.user_id,
        alias_id=alias.id,
        alias_email=alias.email,
        action=action.value,
        message=message,
        commit=commit,
    )
