from abc import ABC, abstractmethod
from typing import Any
from ImageContainer import ImageContainer


class ImageManipulation(ABC):
    """Abstract base class for image manipulation operations."""

    @abstractmethod
    def manipulateImage(self, image: ImageContainer, parameters: Any) -> ImageContainer:
        """
        Manipulate the given image using the provided parameters.

        Args:
            image: The image to manipulate
            parameters: Parameters for the manipulation
        Returns: The manipulated image
        """
        pass

    @abstractmethod
    def getParameters(self) -> list[str]:
        """
        Get the list of parameters required for this manipulation.

        Returns:
            List of parameter names
        """
        pass

    @abstractmethod
    def getManipulationName(self) -> str:
        """
        Get the name of this manipulation operation.

        Returns:
            The name of the manipulation
        """
        pass
