"""Shared domain exception classes used across routers and services."""

from __future__ import annotations


class JailNotFoundError(Exception):
    """Raised when a requested jail name does not exist."""

    def __init__(self, name: str) -> None:
        self.name = name
        super().__init__(f"Jail not found: {name!r}")


class JailOperationError(Exception):
    """Raised when a fail2ban jail operation fails."""


class ConfigValidationError(Exception):
    """Raised when config values fail validation before applying."""


class ConfigOperationError(Exception):
    """Raised when a config payload update or command fails."""


class ServerOperationError(Exception):
    """Raised when a server control command (e.g. refresh) fails."""


class FilterInvalidRegexError(Exception):
    """Raised when a regex pattern fails to compile."""

    def __init__(self, pattern: str, error: str) -> None:
        """Initialize with the invalid pattern and compile error."""
        self.pattern = pattern
        self.error = error
        super().__init__(f"Invalid regex {pattern!r}: {error}")


class JailNotFoundInConfigError(Exception):
    """Raised when the requested jail name is not defined in any config file."""

    def __init__(self, name: str) -> None:
        self.name = name
        super().__init__(f"Jail not found in config: {name!r}")


class ConfigWriteError(Exception):
    """Raised when writing a configuration file modification fails."""

    def __init__(self, message: str) -> None:
        self.message = message
        super().__init__(message)
