# -*- coding: utf-8 -*-
# hub/ticket/state/ticket_state_api.py

"""Публичный state API модуля Ticket."""

from __future__ import annotations

from typing import Any, Mapping, Protocol, Sequence

from domain import TicketTaskSnapshot


class TicketStateApi(Protocol):
    """Контракт для канонического runtime-state и persistence-контура Ticket."""

    def load(self) -> None:
        """Загрузить состояние из репозитория."""

    def list_tasks(self) -> Sequence[TicketTaskSnapshot]:
        """Вернуть все известные задачи."""

    def list_active_tasks(self) -> Sequence[TicketTaskSnapshot]:
        """Вернуть активные задачи."""

    def list_archived_tasks(self) -> Sequence[TicketTaskSnapshot]:
        """Вернуть архивные задачи."""

    def get_task(self, task_id: int) -> TicketTaskSnapshot | None:
        """Вернуть задачу по идентификатору."""

    def upsert_task(self, task: TicketTaskSnapshot) -> None:
        """Создать или обновить задачу в каноническом состоянии."""

    def update_task(self, task_data: Mapping[str, Any]) -> TicketTaskSnapshot | None:
        """Обновить задачу по словарю совместимых полей."""

    def remove_task(self, task_id: int) -> None:
        """Удалить задачу из состояния."""

    def sign_report(self, task_id: int, report_type: str) -> None:
        """Зафиксировать подписание отчёта."""

    def can_advance_to_confirmation(self, task_id: int) -> bool:
        """Проверить готовность задачи к подтверждению."""
