import sys

from allauth.account.models import EmailAddress
from allauth.socialaccount.models import SocialAccount

from avisstage.models import Normalien

from collections import defaultdict

accounts = SocialAccount.objects.all().prefetch_related("user")
profils = Normalien.objects.all()
addresses = EmailAddress.objects.all()


addr_dict = defaultdict(set)
for addr in addresses:
    addr_dict[addr.user_id].add(addr.email)


profil_dict = {profil.user_id: profil for profil in profils}

addr_to_create = []

for acc in accounts:
    u = acc.user

    try:
        profil = profil_dict[u.id]
    except KeyError:
        continue

    to_addr = set()
    if profil.mail:
        to_addr.add(profil.mail)
    cp_ml = "%s@clipper.ens.fr" % acc.uid
    try:
        cp_ml = acc.extra_data["ldap"]["email"]
    except KeyError:
        pass
    to_addr.add(cp_ml)

    addrs = addr_dict[u.id]

    print(u.username, ";".join(list(to_addr)), ";".join(list(addrs)))
    to_addr -= addrs
    has_prim = len(addrs) > 0

    for addr in to_addr:
        ml = EmailAddress(email=addr, user=u, verified=True, primary=has_prim)
        has_prim = False
        addr_to_create.append(ml)

if "--fake" not in sys.argv:
    EmailAddress.objects.bulk_create(addr_to_create)