"""
Audit Log Celery Tasks.
"""
import logging

from celery import shared_task

logger = logging.getLogger('apps')


@shared_task(name='audit_log.cleanup_old_logs')
def cleanup_old_audit_logs(days: int = 90):
    """حذف لاگ‌های قدیمی‌تر از تعداد روز مشخص شده. (Celery Beat)"""
    from .services import AuditLogService
    deleted = AuditLogService.cleanup_old_logs(days=days)
    return f"Deleted {deleted} old audit log entries"


@shared_task(
    name='audit_log.log_access_denied_async',
    max_retries=2,
    default_retry_delay=5,
)
def log_access_denied_async(
    user_id=None,
    permission: str = '',
    resource_type: str = '',
    resource_id: str = '',
    module: str = '',
    ip_address: str | None = None,
    user_agent: str = '',
    tenant_schema: str = '',
):
    """ثبت async دسترسی رد شده."""
    from .models import AuditAction
    from .services import AuditLogService

    user = None
    if user_id:
        try:
            from apps.core.auth.models import User
            user = User.objects.get(pk=user_id)
        except Exception:
            pass

    AuditLogService.log(
        action=AuditAction.ACCESS_DENIED,
        resource_type=resource_type or 'unknown',
        resource_id=resource_id or '',
        resource_repr=f'Permission: {permission}',
        user=user,
        module=module,
        ip_address=ip_address,
        user_agent=user_agent,
        metadata={'permission_required': permission},
        tenant_schema=tenant_schema,
    )
