"""Append dated ACT and REVIEW findings to the deadline register."""

from __future__ import annotations

import json
from datetime import datetime, timezone
from typing import Any

from notify import ROOT


REGISTER_PATH = ROOT / "data" / "deadlines.jsonl"


def append_deadlines(findings: list[dict[str, Any]]) -> int:
    dated = [
        finding
        for finding in findings
        if finding["bucket"] in {"ACT", "REVIEW"} and finding.get("normalized_date")
    ]
    if not dated:
        return 0
    now = datetime.now(timezone.utc).isoformat()
    first_seen: dict[tuple[str, str, str, str], str] = {}
    if REGISTER_PATH.exists():
        for line in REGISTER_PATH.read_text(encoding="utf-8").splitlines():
            if not line.strip():
                continue
            record = json.loads(line)
            key = (
                record.get("account", "signup"),
                record["date"],
                record["source_subject"],
                record["source_sender"],
            )
            first_seen.setdefault(key, record["first_seen"])

    REGISTER_PATH.parent.mkdir(parents=True, exist_ok=True)
    with REGISTER_PATH.open("a", encoding="utf-8", newline="\n") as handle:
        for finding in dated:
            key = (
                finding.get("account", "signup"),
                finding["normalized_date"],
                finding["subject"],
                finding["sender"],
            )
            record = {
                "account": finding.get("account", "signup"),
                "date": finding["normalized_date"],
                "what": finding["reasons"][0] if finding["reasons"] else finding["subject"],
                "source_subject": finding["subject"],
                "source_sender": finding["sender"],
                "first_seen": first_seen.get(key, now),
                "last_seen": now,
            }
            handle.write(json.dumps(record, ensure_ascii=False) + "\n")
    return len(dated)
