from __future__ import annotations

from .logs import THREAT_ACTIONS
from .models import LogEvent
from .normalization import canonical_value


DETECTOR_MINIMUMS = {
    "auth_failure": 5,
    "dns_query": 20,
    "deny_action": 10,
}


def event_detector_categories(event: LogEvent) -> tuple[str, ...]:
    fields = event.fields
    action = event.action
    event_id = canonical_value(fields, "eventid")
    categories: list[str] = []
    if action in {"fail", "failed", "failure", "login_failed", "logon_failed", "authentication_failed"} or event_id == "4625":
        categories.append("auth_failure")
    if fields.get("dns_query"):
        categories.append("dns_query")
    if action in THREAT_ACTIONS:
        categories.append("deny_action")
    return tuple(categories)
