"""LDAP Sync tasks"""
from time import time

from django.core.cache import cache

from passbook.root.celery import CELERY_APP
from passbook.sources.ldap.models import LDAPSource
from passbook.sources.ldap.sync import LDAPSynchronizer


@CELERY_APP.task()
def sync():
    """Sync all sources"""
    for source in LDAPSource.objects.filter(enabled=True):
        sync_single.delay(source.pk)


@CELERY_APP.task()
def sync_single(source_pk):
    """Sync a single source"""
    source: LDAPSource = LDAPSource.objects.get(pk=source_pk)
    syncer = LDAPSynchronizer(source)
    syncer.sync_users()
    syncer.sync_groups()
    syncer.sync_membership()
    cache_key = source.state_cache_prefix("last_sync")
    cache.set(cache_key, time(), timeout=60 * 60)