# -*- coding: utf-8 -*-
"""
Celery configuration for Adtlas DAI Management System.

This module configures Celery for handling background tasks such as:
- VAST call processing
- Ad encoding operations
- Analytics data processing
- Report generation
- File transfers
- Notification sending

Celery is used for:
1. Asynchronous task execution
2. Periodic task scheduling
3. Task result storage
4. Task monitoring and management

For more information on Celery configuration, see:
https://docs.celeryproject.org/en/stable/django/first-steps-with-django.html
"""

from __future__ import absolute_import, unicode_literals

import os
from celery import Celery
from django.conf import settings

# Set the default Django settings module for the 'celery' program
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')

# Create the Celery application instance
app = Celery('adtlas')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django apps.
app.autodiscover_tasks()

# # Celery beat schedule for periodic tasks
# app.conf.beat_schedule = {
#     # Clean up expired sessions every hour
#     'cleanup-expired-sessions': {
#         'task': 'apps.accounts.tasks.cleanup_expired_sessions',
#         'schedule': 3600.0,  # Run every hour
#     },
#     # Update VAST responses every 5 minutes
#     'update-vast-responses': {
#         'task': 'apps.vast.tasks.update_vast_responses',
#         'schedule': 300.0,  # 5 minutes
#     },
#     # Generate daily analytics reports
#     'generate-daily-analytics': {
#         'task': 'apps.analytics.tasks.generate_daily_report',
#         # 'task': 'apps.analytics.tasks.generate_daily_analytics',
#         'schedule': 86400.0,  # Run daily: 24 hours
#     },  
#     # Clean up old log files
#     'cleanup-old-logs': {
#         'task': 'apps.core.tasks.cleanup_old_logs',
#         'schedule': 604800.0,  # Run weekly: 7 days
#     }, 
#     # Sync campaign statuses
#     'sync-campaign-statuses': {
#         'task': 'apps.campaigns.tasks.sync_campaign_statuses',
#         'schedule': 1800.0,  # 30 minutes
#     },
#     # Process pending ad slots
#     'process-pending-adslots': {
#         'task': 'apps.adspots.tasks.process_pending_adslots',
#         'schedule': 600.0,  # 10 minutes
#     }, 
#     # Process pending campaigns
#     'process-pending-campaigns': {
#         'task': 'apps.campaigns.tasks.process_pending_campaigns',
#         'schedule': 300.0,  # Run every 5 minutes
#     }, 
#     # Sync VAST data
#     'sync-vast-data': {
#         'task': 'apps.vast.tasks.sync_vast_data',
#         'schedule': 1800.0,  # Run every 30 minutes
#     },
# }

# Celery task configuration
app.conf.update(
    # Task serialization
    task_serializer='json',
    accept_content=['json'],
    result_serializer='json',
    
    # Broker connection settings
    broker_connection_retry_on_startup=True,  # Fix for Celery 6.0+ deprecation warning
    
    # Task routing
    task_routes={
        'apps.vast.tasks.*': {'queue': 'vast'},
        'apps.analytics.tasks.*': {'queue': 'analytics'},
        'apps.adspots.tasks.*': {'queue': 'encoding'},
        'apps.core.tasks.*': {'queue': 'maintenance'},
    },
    
    # Task execution settings
    task_always_eager=False,
    task_eager_propagates=True,
    task_ignore_result=False,
    task_store_eager_result=True,
    
    # Worker settings
    worker_prefetch_multiplier=1,
    worker_max_tasks_per_child=1000,
    
    # Result backend settings
    result_expires=3600,  # 1 hour
    result_backend_transport_options={
        'master_name': 'mymaster',
    },
)


 