from abc import ABC, abstractmethod

from ..context import MoveContext


class BaseDetector(ABC):
    """Базовый класс для всех детекторов тактических тем."""

    # Ключ для локализации (например, "double_check")
    key: str = ""

    @abstractmethod
    def detect(self, ctx: MoveContext) -> bool:
        """
        Проверяет, произошла ли тактическая тема.

        Args:
            ctx: Контекст хода с состоянием до и после.

        Returns:
            True если тема обнаружена, False иначе.
        """
        pass

    def format_details(self, ctx: MoveContext, lang: str) -> str:
        """
        Форматирует детали обнаруженной темы.

        Вызывается ПОСЛЕ detect() вернул True.
        Детекторы переопределяют для добавления подробностей.

        Returns:
            Строка с деталями или "" если деталей нет.
        """
        return ""

    def get_arrows(self, ctx: MoveContext) -> list[tuple[int, int]]:
        """
        Возвращает стрелки и подсвечиваемые поля для PGN-аннотации.

        Каждый элемент — пара (from_sq, to_sq).
        Если from_sq == to_sq — подсветка поля.

        Вызывается ПОСЛЕ detect() вернул True.
        """
        return []
