"""
Celery Application Factory - Simplified Setup
"""
import logging
from typing import Optional
from celery import Celery
from celery.signals import worker_ready, worker_shutdown

from src.worker.config import celery_settings

logger = logging.getLogger(__name__)


def create_celery_app(app_name: str = "fastapi-celery") -> Celery:
    """
    Create and configure Celery application
    
    Args:
        app_name: Name of the Celery application
    
    Returns:
        Celery: Configured Celery application instance
    """
    # Create Celery instance
    celery_app = Celery(app_name)
    
    # Apply configuration
    config = celery_settings.get_celery_config()
    celery_app.config_from_object(config)
    
    
    # Future-ready: Configure task routes for different queues
    # This setup allows easy expansion to multiple queues
    celery_app.conf.task_routes = {
        # Example: 'src.worker.tasks.email_task': {'queue': 'emails'},
        # Default queue for all tasks
        '*': {'queue': celery_settings.CELERY_TASK_DEFAULT_QUEUE},
    }
    
    return celery_app


def setup_worker_signals():
    """Setup basic worker lifecycle signals"""
    
    @worker_ready.connect
    def worker_ready_handler(sender=None, **kwargs):
        """Handle worker ready signal"""
        logger.info("Celery worker is ready and processing tasks")
    
    @worker_shutdown.connect  
    def worker_shutdown_handler(sender=None, **kwargs):
        """Handle worker shutdown signal"""
        logger.info("Celery worker is shutting down")


# Create the global Celery app instance
celery_app = create_celery_app()

# Setup signals
setup_worker_signals()

# Auto-discover tasks after celery_app is created to avoid circular imports
celery_app.autodiscover_tasks(['src.worker'], force=True)

# Export the main functions
__all__ = ["celery_app", "create_celery_app"]