from celery import shared_task

from apps.telemetry.models import TelemetryKPIAggregate
from apps.telemetry.services import (
    aggregate_kpis,
    compact_and_apply_retention,
    compute_cohort_snapshots,
    compute_funnel_snapshots,
    compute_retention_snapshots,
    detect_anomalies,
)


@shared_task(bind=True, max_retries=2, default_retry_delay=60)
def aggregate_daily_kpis_task(self):
    aggregate_kpis(TelemetryKPIAggregate.PeriodType.DAY)
    return {'success': True, 'period': 'daily'}


@shared_task(bind=True, max_retries=2, default_retry_delay=60)
def aggregate_weekly_kpis_task(self):
    aggregate_kpis(TelemetryKPIAggregate.PeriodType.WEEK)
    return {'success': True, 'period': 'weekly'}


@shared_task(bind=True, max_retries=2, default_retry_delay=60)
def aggregate_monthly_kpis_task(self):
    aggregate_kpis(TelemetryKPIAggregate.PeriodType.MONTH)
    return {'success': True, 'period': 'monthly'}


@shared_task(bind=True, max_retries=2, default_retry_delay=60)
def compute_cohort_snapshots_task(self):
    compute_cohort_snapshots()
    return {'success': True}


@shared_task(bind=True, max_retries=2, default_retry_delay=60)
def compute_retention_snapshots_task(self):
    compute_retention_snapshots()
    return {'success': True}


@shared_task(bind=True, max_retries=2, default_retry_delay=60)
def compute_funnel_snapshots_task(self):
    compute_funnel_snapshots()
    return {'success': True}


@shared_task(bind=True, max_retries=2, default_retry_delay=60)
def detect_telemetry_anomalies_task(self):
    detect_anomalies()
    return {'success': True}


@shared_task(bind=True, max_retries=2, default_retry_delay=60)
def compact_telemetry_data_task(self):
    compact_and_apply_retention()
    return {'success': True}
