# middleware/context.py
"""
DEPRECATED: This module is deprecated in favor of middleware/frontend_type.py

The RequestContext enum and ContextMiddleware have been replaced by:
- FrontendType enum (app/modules/enums.py)
- FrontendTypeMiddleware (middleware/frontend_type.py)
- FrontendDetector (app/core/frontend_detector.py)

This file is kept for backwards compatibility during the migration period.
All new code should use FrontendType and FrontendTypeMiddleware instead.

Migration guide:
- RequestContext.API -> Check with FrontendDetector.is_api_request()
- RequestContext.ADMIN -> FrontendType.ADMIN
- RequestContext.VENDOR_DASHBOARD -> FrontendType.VENDOR
- RequestContext.SHOP -> FrontendType.STOREFRONT
- RequestContext.FALLBACK -> FrontendType.PLATFORM (or handle API separately)

- get_request_context(request) -> get_frontend_type(request)
- request.state.context_type -> request.state.frontend_type
"""

import logging
import warnings
from enum import Enum

from fastapi import Request

from app.modules.enums import FrontendType
from middleware.frontend_type import get_frontend_type

logger = logging.getLogger(__name__)


class RequestContext(str, Enum):
    """
    DEPRECATED: Use FrontendType enum instead.

    Request context types for the application.
    This enum is kept for backwards compatibility.

    Migration:
    - API -> Use FrontendDetector.is_api_request() + FrontendType
    - ADMIN -> FrontendType.ADMIN
    - VENDOR_DASHBOARD -> FrontendType.VENDOR
    - SHOP -> FrontendType.STOREFRONT
    - FALLBACK -> FrontendType.PLATFORM
    """

    API = "api"
    ADMIN = "admin"
    VENDOR_DASHBOARD = "vendor"
    SHOP = "shop"
    FALLBACK = "fallback"


def get_request_context(request: Request) -> RequestContext:
    """
    DEPRECATED: Use get_frontend_type() from middleware.frontend_type instead.

    Helper function to get current request context.
    This function maps FrontendType to RequestContext for backwards compatibility.

    Args:
        request: FastAPI request object

    Returns:
        RequestContext enum value (defaults to FALLBACK if not set)
    """
    warnings.warn(
        "get_request_context() is deprecated. Use get_frontend_type() from "
        "middleware.frontend_type instead.",
        DeprecationWarning,
        stacklevel=2,
    )

    # Get the new frontend_type
    frontend_type = get_frontend_type(request)

    # Map FrontendType to RequestContext for backwards compatibility
    mapping = {
        FrontendType.ADMIN: RequestContext.ADMIN,
        FrontendType.VENDOR: RequestContext.VENDOR_DASHBOARD,
        FrontendType.STOREFRONT: RequestContext.SHOP,
        FrontendType.PLATFORM: RequestContext.FALLBACK,
    }

    # Check if it's an API request
    if request.url.path.startswith("/api/"):
        return RequestContext.API

    return mapping.get(frontend_type, RequestContext.FALLBACK)


# ContextManager and ContextMiddleware are removed.
# They have been replaced by FrontendDetector and FrontendTypeMiddleware.
# Import from the new locations:
#   from app.core.frontend_detector import FrontendDetector
#   from middleware.frontend_type import FrontendTypeMiddleware, get_frontend_type
