from django.core.management.base import BaseCommand
from django.utils import timezone

from apps.core.models import AccessAuditLog, DepartmentMembership


class Command(BaseCommand):
    help = "Suspend department memberships whose expiry time has passed."

    def handle(self, *args, **options):
        now = timezone.now()
        memberships = list(DepartmentMembership.objects.select_related("user").filter(
            is_active=True, expires_at__isnull=False, expires_at__lte=now,
        ))
        for membership in memberships:
            membership.is_active = False
            membership.suspended_at = now
            membership.save(update_fields=["is_active", "suspended_at"])
            AccessAuditLog.objects.create(
                target_user=membership.user, event_type="department_membership_expired",
                object_type="department_membership", object_id=str(membership.id),
                previous_value={"role": membership.role, "department_id": str(membership.department_id)},
            )
        self.stdout.write(self.style.SUCCESS(f"Expired {len(memberships)} membership(s)."))
