from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Count
from sapl.base.models import Autor
from sapl.parlamentares.models import Parlamentar


def pega_autores():
    return [[autor for autor in Autor.objects.filter(nome=nome)]
            for nome in Autor.objects.values_list('nome', flat=True).annotate(qntd=Count('nome')).filter(qntd__gt=1)]


def pega_parlamentares_autores():
    parlamentares = [[parlamentar for parlamentar in Parlamentar.objects.filter(nome_parlamentar=nome_parlamentar)]
                     for nome_parlamentar in Parlamentar.objects.values_list('nome_parlamentar', flat=True)
                     .annotate(qntd=Count('nome_parlamentar')).filter(qntd__gt=1)]

    parlamentares_autores = []

    for parlamentar in parlamentares:
        parlamentar_autor = []
        for clone in parlamentar[1:]:
            try:
                autor_principal = Autor.objects.get(parlamentar_set=parlamentar[0])
            except ObjectDoesNotExist:
                try:
                    autor_clonado = Autor.objects.get(parlamentar_set=clone)
                except ObjectDoesNotExist:
                    pass
                else:
                    autor_clonado.object_id = parlamentar[0].id
                    autor_clonado.save()
                    parlamentares_autores.append(autor_clonado)
            else:
                if len(parlamentar_autor) == 0:
                    parlamentar_autor.append(autor_principal)

                try:
                    autor_clonado = Autor.objects.get(parlamentar_set=clone)
                except ObjectDoesNotExist:
                    pass
                else:
                    parlamentar_autor.append(autor_clonado)
        parlamentares_autores.extend(parlamentar_autor)

    return parlamentares_autores


def transfere_valores(autores):
    for autor in autores:
        for clone in autor[1:]:
            for autoria in clone.autoria_set.all():
                autoria.autor_id = autor[0]
                autoria.save()

            for proposicao in clone.proposicao_set.all():
                proposicao.autor_id = autor[0]
                proposicao.save()

            for autorianorma in clone.autorianorma_set.all():
                autorianorma.autor_id = autor[0]
                autorianorma.save()

            for documentoadministrativo in clone.documentoadministrativo_set.all():
                documentoadministrativo.autor_id = autor[0]
                documentoadministrativo.save()

            for protocolo in clone.protocolo_set.all():
                protocolo.autor_id = autor[0]
                protocolo.save()

            clone.delete()


def main():
    autores = pega_autores()
    parlamentares_autores = pega_parlamentares_autores()

    autores.append(parlamentares_autores)

    transfere_valores(autores)


if __name__ == '__main__':
    main()