"""
Art DAG Celery Application

Streaming video rendering for the Art DAG system.
Uses S-expression recipes with frame-by-frame processing.
"""

import os
import sys
from celery import Celery
from celery.signals import worker_ready

# Use central config
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from app.config import settings

app = Celery(
    'art_celery',
    broker=settings.redis_url,
    backend=settings.redis_url,
    include=['tasks', 'tasks.streaming', 'tasks.ipfs_upload']
)


@worker_ready.connect
def log_config_on_startup(sender, **kwargs):
    """Log configuration when worker starts."""
    print("=" * 60, file=sys.stderr)
    print("WORKER STARTED - CONFIGURATION", file=sys.stderr)
    print("=" * 60, file=sys.stderr)
    settings.log_config()
    print(f"Worker: {sender}", file=sys.stderr)
    print("=" * 60, file=sys.stderr)

app.conf.update(
    result_expires=86400 * 7,  # 7 days - allow time for recovery after restarts
    task_serializer='json',
    accept_content=['json', 'pickle'],  # pickle needed for internal Celery messages
    result_serializer='json',
    event_serializer='json',
    timezone='UTC',
    enable_utc=True,
    task_track_started=True,
    task_acks_late=True,  # Don't ack until task completes - survives worker restart
    worker_prefetch_multiplier=1,
    task_reject_on_worker_lost=True,  # Re-queue if worker dies
    task_acks_on_failure_or_timeout=True,  # Ack failed tasks so they don't retry forever
)

if __name__ == '__main__':
    app.start()
