import chess

from ..base import BaseDetector
from ...context import MoveContext
from ...i18n import format_piece_square


class DoubleCheckDetector(BaseDetector):
    """
    Детектор двойного шаха.

    Двойной шах — ситуация, когда две фигуры одновременно
    атакуют короля противника после хода.
    """

    key = "double_check"

    def __init__(self):
        self._checker_squares: list[int] = []

    def detect(self, ctx: MoveContext) -> bool:
        """Проверяет, является ли ход двойным шахом."""
        self._checker_squares = []

        # Должен быть шах
        if not ctx.is_check:
            return False

        # Две или более фигуры атакуют короля
        if ctx.attackers_count >= 2:
            self._checker_squares = list(ctx.attackers_on_king)
            return True
        return False

    def format_details(self, ctx: MoveContext, lang: str) -> str:
        if not self._checker_squares:
            return ""
        parts = []
        for sq in self._checker_squares:
            piece = ctx.board_after.piece_at(sq)
            if piece:
                parts.append(format_piece_square(piece, sq, lang))
        return ", ".join(parts)

    def get_arrows(self, ctx: MoveContext) -> list[tuple[int, int]]:
        result = []
        king_sq = ctx.board_after.king(ctx.opponent_side)
        if king_sq is not None:
            for sq in self._checker_squares:
                result.append((sq, king_sq))
        return result
