"""
Development authentication utilities for StarPunk

WARNING: These functions provide authentication bypass for local development.
They should ONLY be used when DEV_MODE=true.

This module contains utilities that should never be used in production.
"""

import logging
from flask import current_app
from starpunk.auth import create_session


logger = logging.getLogger(__name__)


def is_dev_mode() -> bool:
    """
    Check if development mode is enabled

    Returns:
        bool: True if DEV_MODE is explicitly set to True, False otherwise

    Security:
        This function is used to guard all development authentication features.
        It explicitly checks for True (not just truthy values).
    """
    return current_app.config.get("DEV_MODE", False) is True


def create_dev_session(me: str) -> str:
    """
    Create a development session without authentication

    WARNING: This creates an authenticated session WITHOUT any verification.
    Only call this function after verifying is_dev_mode() returns True.

    Args:
        me: The identity URL to create a session for (typically DEV_ADMIN_ME)

    Returns:
        str: Session token for the created session

    Raises:
        ValueError: If me is empty or invalid

    Logs:
        WARNING: Logs that dev authentication was used (for security audit trail)

    Security:
        - Should only be called when DEV_MODE=true
        - Logs warning on every use
        - Uses same session creation as production (just skips auth)
    """
    if not me:
        raise ValueError("Identity (me) is required")

    # Log security warning
    logger.warning(
        f"DEV MODE: Creating session for {me} WITHOUT authentication. "
        "This should NEVER happen in production!"
    )

    # Create session using production session creation
    # This ensures dev sessions work exactly like production sessions
    session_token = create_session(me)

    return session_token
