# app/modules/dev_tools/exceptions.py
"""
Dev-Tools Module Exceptions

Module-specific exceptions for code quality and test runner functionality.
Re-exports code quality exceptions from the legacy location and adds
test runner specific exceptions.
"""

from app.exceptions.base import (
    ExternalServiceException,
    ResourceNotFoundException,
)

# Re-export code quality exceptions from their module location
from app.modules.monitoring.exceptions import (
    InvalidViolationStatusException,
    ScanExecutionException,
    ScanNotFoundException,
    ScanParseException,
    ScanTimeoutException,
    ViolationNotFoundException,
    ViolationOperationException,
)

# =============================================================================
# Test Runner Exceptions (defined here as they don't exist in legacy location)
# =============================================================================


class TestRunNotFoundException(ResourceNotFoundException):  # noqa: MOD025
    """Raised when a test run is not found."""

    def __init__(self, run_id: int):
        super().__init__(
            resource_type="TestRun",
            identifier=str(run_id),
            error_code="TEST_RUN_NOT_FOUND",
        )


class TestExecutionException(ExternalServiceException):  # noqa: MOD025
    """Raised when test execution fails."""

    def __init__(self, reason: str):
        super().__init__(
            service_name="TestRunner",
            message=f"Test execution failed: {reason}",
            error_code="TEST_EXECUTION_FAILED",
        )


class TestTimeoutException(ExternalServiceException):  # noqa: MOD025
    """Raised when test execution times out."""

    def __init__(self, timeout_seconds: int = 3600):
        super().__init__(
            service_name="TestRunner",
            message=f"Test execution timed out after {timeout_seconds} seconds",
            error_code="TEST_TIMEOUT",
        )


__all__ = [
    # Code quality exceptions (re-exported)
    "ViolationNotFoundException",
    "ScanNotFoundException",
    "ScanExecutionException",
    "ScanTimeoutException",
    "ScanParseException",
    "ViolationOperationException",
    "InvalidViolationStatusException",
    # Test runner exceptions (defined here)
    "TestRunNotFoundException",
    "TestExecutionException",
    "TestTimeoutException",
]
