"""Client query lifecycle helpers."""

from __future__ import annotations

STATUS_REQUESTED = "Requested"
STATUS_DELIVERED = "Delivered"
STATUS_ANSWERED = "Answered"
STATUS_RESOLVED = "Resolved"
STATUS_CANCELLED = "Cancelled"

# Legacy statuses (pre-thread migration)
LEGACY_APPROVED = "Approved"

OPEN_STATUSES = {STATUS_REQUESTED, STATUS_DELIVERED, STATUS_ANSWERED}
CLIENT_OPEN_STATUSES = {STATUS_DELIVERED}
FIRM_ACTION_STATUSES = {STATUS_ANSWERED}

PRIORITY_LOW = "Low"
PRIORITY_NORMAL = "Normal"
PRIORITY_HIGH = "High"
VALID_PRIORITIES = {PRIORITY_LOW, PRIORITY_NORMAL, PRIORITY_HIGH}


class QueryWorkflowError(ValueError):
    pass


def normalize_status(status: str) -> str:
    """Map retired labels onto the current 5-state lifecycle."""
    if status == LEGACY_APPROVED:
        return STATUS_RESOLVED
    return status


def migrate_legacy_status(status: str) -> str:
    """Map retired statuses. Requested/Delivered/Answered are live values — do not remap them."""
    return normalize_status(status)


def can_client_reply(status: str) -> bool:
    return status in {STATUS_DELIVERED, STATUS_ANSWERED}


def can_firm_resolve(status: str) -> bool:
    return status in {STATUS_DELIVERED, STATUS_ANSWERED}


def can_firm_cancel(status: str) -> bool:
    return status in {STATUS_REQUESTED, STATUS_DELIVERED, STATUS_ANSWERED}
