"""解析旧 Logs 字段：'{DateTime.Now} <b>{姓名(用户名)}</b> {动作}'，多条以 <br /> 分隔，en-US 格式。"""
import datetime as dt
import re
from dataclasses import dataclass

_ENTRY = re.compile(
    r"(?P<at>\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}:\d{2}(?: [AP]M)?)\s*<b>(?P<who>.*?)</b>\s*(?P<action>.*?)\s*(?=<br\s*/?>|$)",
    re.S,
)


@dataclass(frozen=True)
class LogEntry:
    at: dt.datetime
    who: str
    action: str


def _parse_time(text: str) -> dt.datetime:
    fmt = "%m/%d/%Y %I:%M:%S %p" if text.endswith(("AM", "PM")) else "%m/%d/%Y %H:%M:%S"
    return dt.datetime.strptime(text, fmt)


def parse_log_entries(text: str | None) -> list[LogEntry]:
    return [LogEntry(_parse_time(m["at"]), m["who"], m["action"].strip()) for m in _ENTRY.finditer(text or "")]
