from __future__ import annotations

import re
from dataclasses import dataclass
from datetime import datetime


@dataclass(frozen=True)
class ReminderIntent:
    when: datetime
    message: str


def extract_case_id(text: str) -> int | None:
    patterns = [
        r"\b(?:iş|is|id)\s*[:#№]?\s*(\d+)",
        r"\b(\d+)\s*(?:nömrəli|nomreli|№)\s*(?:iş|is)",
        r"^/case(\d+)$",
    ]
    for pattern in patterns:
        match = re.search(pattern, text.strip(), re.IGNORECASE)
        if match:
            return int(match.group(1))
    return None


def parse_ai_tag(tag: str, text: str) -> str | None:
    match = re.search(rf"\[{re.escape(tag)}:\s*(.+?)\]", text, re.DOTALL)
    return match.group(1).strip() if match else None


def parse_pipe_tag(tag: str, text: str) -> list[str] | None:
    value = parse_ai_tag(tag, text)
    if value is None:
        return None
    return [part.strip() for part in value.split("|")]


def parse_reminder_tag(text: str) -> ReminderIntent | None:
    value = parse_pipe_tag("XATIRLATMA", text)
    if not value or len(value) < 2:
        return None
    try:
        when = datetime.strptime(value[0], "%d.%m.%Y %H:%M")
    except ValueError:
        return None
    return ReminderIntent(when=when, message=value[1])


def clean_ai_tags(text: str) -> str:
    tags = [
        "XATIRLATMA",
        "EMAIL",
        "IS_ELAVE",
        "IS_REDAKTE",
        "IS_TAP",
        "IS_GOSTER",
        "IS_AXTAR",
        "TASK_ELAVE",
        "TASKS_GOSTER",
        "TASKS_ACIQ",
    ]
    for tag in tags:
        text = re.sub(rf"\[{tag}:[^\]]*\]", "", text, flags=re.DOTALL)
    return text.strip()

