"""Domain-level exceptions for service and repository layers."""

from dataclasses import dataclass
from typing import Sequence


class EntityNotFoundError(Exception):
    """Raised when a requested entity cannot be located."""


class EntityConflictError(Exception):
    """Raised when attempting to create or update an entity that violates uniqueness."""


class AuthorizationError(Exception):
    """Raised when a user lacks permission to perform an action."""


@dataclass(eq=False)
class ScenarioValidationError(Exception):
    """Raised when scenarios fail comparison validation rules."""

    code: str
    message: str
    scenario_ids: Sequence[int] | None = None

    def __str__(self) -> str:  # pragma: no cover - mirrors message for logging
        return self.message


@dataclass(eq=False)
class ProfitabilityValidationError(Exception):
    """Raised when profitability calculation inputs fail domain validation."""

    message: str
    field_errors: Sequence[str] | None = None

    def __str__(self) -> str:  # pragma: no cover - mirrors message for logging
        return self.message
