"""Correspondence Celery tasks."""

from __future__ import annotations

import structlog
from celery import shared_task
from django.utils import timezone

_log = structlog.get_logger("simorgh.correspondence.tasks")


@shared_task(
    name="correspondence.auto_archive_completed",
    autoretry_for=(Exception,),
    max_retries=3,
    default_retry_delay=60,
)
def auto_archive_completed() -> int:
    """Archive letters that have been in completed status past the configured threshold."""
    from datetime import timedelta

    from simorgh.apps.app_settings.services import resolve as resolve_setting
    from simorgh.apps.correspondence.models import Letter, LetterStatus

    archived_count = 0

    # Process each tenant separately
    try:
        from simorgh.apps.tenants.models import Tenant

        for tenant in Tenant.objects.filter(is_active=True):
            try:
                days = resolve_setting(
                    "correspondence.auto_archive_days", tenant_id=tenant.pk
                )
            except Exception:
                days = 0

            if not days or days <= 0:
                continue

            threshold = timezone.now().date() - timedelta(days=days)
            qs = Letter.objects.filter(
                tenant=tenant,
                status=LetterStatus.COMPLETED,
                updated_at__date__lte=threshold,
            ).exclude(status=LetterStatus.ARCHIVED)

            count = qs.update(status=LetterStatus.ARCHIVED)
            if count:
                _log.info(
                    "correspondence.auto_archive_completed",
                    tenant_id=tenant.pk,
                    archived_count=count,
                )
            archived_count += count
    except (ImportError, Exception):
        _log.exception("correspondence.auto_archive_completed.error")

    return archived_count
