# -*- coding: utf-8 -*-
# hub/ticket/application/report_signing_service.py

"""Application-сервис подписания отчётов Ticket."""

from __future__ import annotations

from domain.task import TicketTask
from domain.ticket_constants import STATE_CONFIRMATION
from state import TicketStateApi


class ReportSigningService:
    """Команды подписания отчётов поверх канонического state API."""

    def __init__(self, state: TicketStateApi):
        self._state = state

    def sign_report(self, task_id: int, report_type: str):
        """Подписать диагностический или ремонтный отчёт."""
        snapshot = self._state.get_task(task_id)
        if snapshot is None:
            return None
        if report_type not in {"diagnostic", "repair"}:
            return None
        self._state.sign_report(task_id, report_type)
        return self._state.get_task(task_id)

    def sign_acceptance_report(self, task_id: int):
        """Подписать акт приёмки без смены доменного состояния."""
        snapshot = self._state.get_task(task_id)
        if snapshot is None:
            return None
        task_data = TicketTask.from_snapshot(snapshot).to_record()
        task_data["acceptance_report_signed"] = True
        return self._state.update_task(task_data)

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

    def can_advance_to_completed(self, task_id: int) -> bool:
        """Проверить готовность задачи к переходу в выполненные."""
        snapshot = self._state.get_task(task_id)
        if snapshot is None:
            return False
        return (
            snapshot.state_code == STATE_CONFIRMATION
            and snapshot.acceptance_report_signed
        )
