# type: ignore
"""Helper functions for tests."""

import re


class Regex:
    """Assert that a given string meets some expectations.

    Usage:
        from tests.helpers import Regex

        assert caplog.text == Regex(r"^.*$", re.I)
    """

    def __init__(self, pattern, flags=0):
        self._regex = re.compile(pattern, flags)

    def __eq__(self, actual):
        """Define equality.

        Args:
            actual (str): String to be matched to the regex

        Returns:
            bool: True if the actual string matches the regex, False otherwise.
        """
        return bool(self._regex.search(actual))

    def __repr__(self):
        """Error printed on failed tests."""
        return f"Regex: '{self._regex.pattern}'"


class KeyInputs:
    """Key inputs for testing."""

    DOWN = "\x1b[B"
    UP = "\x1b[A"
    LEFT = "\x1b[D"
    RIGHT = "\x1b[C"
    ENTER = "\r"
    ESCAPE = "\x1b"
    CONTROLC = "\x03"
    BACK = "\x7f"
    SPACE = " "
    TAB = "\x09"
    ONE = "1"
    TWO = "2"
    THREE = "3"


def strip_ansi(text) -> str:
    """Remove ANSI escape sequences from a string.

    Args:
        text (str): String to remove ANSI escape sequences from.

    Returns:
        str: String without ANSI escape sequences.
    """
    ansi_chars = re.compile(r"(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]")
    return ansi_chars.sub("", text)
