import logging

from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
import django.conf
from django_mailman3.lib.mailman import get_mailman_user
from allauth.account.models import EmailAddress

from postorius_ldap_membership_management.utils import get_ldap_connection, execute_ldap_search_without_hiding_errors, populate_user

logger = logging.getLogger(__name__)

class Command(BaseCommand):
	can_import_settings = True
	help = 'Synchronize users from a LDAP server'

	def handle(self, *args, **options):
		ldap_conn = get_ldap_connection()
		results = execute_ldap_search_without_hiding_errors(django.conf.settings.AUTH_LDAP_USER_SEARCH_ALL_NAME, ldap_conn)
		ldap_usernames = [list(attr.values())[0][0] for dn, attr in results]
		for username in ldap_usernames:
			logger.warning(f'creating or updating {username}')
			# populate_user ignores all errors
			populate_user(username)

		users = get_user_model().objects.filter(is_active=True)
		for user in users:
			if not user.username in ldap_usernames:
				logger.warning(f'deactivating {user.username}')
				user.is_active = False
				user.save()