from celery import Celery
from app.core.config import settings

celery_app = Celery("chemitec_datalake", broker=settings.redis_url, backend=settings.redis_url)
celery_app.conf.update(
    task_serializer="json",
    result_serializer="json",
    accept_content=["json"],
    task_acks_late=True,
    worker_prefetch_multiplier=1,
    task_reject_on_worker_lost=True,
    timezone="America/Sao_Paulo",
    beat_schedule={
        "scan-dataset-schedules-every-minute": {
            "task": "scan_dataset_schedules",
            "schedule": 60.0,
        }
    },
)

celery_app.conf.beat_schedule['run-automations-every-minute']={'task':'run_automations','schedule':60.0}
celery_app.conf.beat_schedule['run-report-schedules-every-minute']={'task':'run_report_schedules','schedule':60.0}
celery_app.conf.beat_schedule['evaluate-alert-rules-every-minute']={'task':'evaluate_alert_rules','schedule':60.0}
celery_app.conf.beat_schedule['advance-workflow-timers-every-minute']={'task':'advance_workflow_timers','schedule':60.0}
celery_app.conf.beat_schedule['dispatch-mobile-push-every-minute']={'task':'dispatch-mobile-push','schedule':60.0}

celery_app.conf.beat_schedule['run-quality-schedules-every-minute']={'task':'run-quality-schedules','schedule':60.0}

celery_app.conf.beat_schedule['collect-platform-health-every-minute']={'task':'collect-platform-health','schedule':60.0}
celery_app.conf.beat_schedule['evaluate-observability-policies-every-minute']={'task':'evaluate-observability-policies','schedule':60.0}

celery_app.conf.beat_schedule['cluster-heartbeat-every-15-seconds']={'task':'cluster-heartbeat','schedule':15.0}
celery_app.conf.beat_schedule['run-backup-schedules-every-minute']={'task':'run-backup-schedules','schedule':60.0}
celery_app.conf.beat_schedule['cleanup-federated-artifacts-v018-hourly']={'task':'cleanup-federated-artifacts-v018','schedule':3600.0}


def tenant_task_options(tenant_id: str, priority: str = 'default') -> dict:
    safe = ''.join(c if c.isalnum() else '_' for c in tenant_id)[:48]
    priority = priority if priority in {'low','default','high'} else 'default'
    return {'queue': f'tenant.{safe}.{priority}', 'headers': {'tenant_id': tenant_id}}
celery_app.conf.beat_schedule['scan-data-process-flows-v024-every-minute']={'task':'scan-data-process-flows-v024','schedule':60.0}
