"""Module for input parser interface."""

from abc import ABC, abstractmethod
from typing import Any, List, Tuple


class InputParser(ABC):
    """Input parser interface.

    Input parser is used to parse input standarized set of into text and annotations.
    """

    @abstractmethod
    def parse(self, content: str) -> Tuple[str, List[Tuple[int, int, Any]]]:
        """Parse input string into text and annotations.

        Annotations are returned as a dictionary with channel name as a key and list of
        tuples. Eg.:
        Input
        "She has a cat"
        Output:
        ("She has a cat", {"entities": [(0, 3, "She"), (8, 11, "cat")]})

        Args:
            content (str): Input in raw form.

        Returns:
            Tuple[str, Dict[str, List[Tuple[int, int, Any]]]]: Text and annotations.

        """
        pass