"""
Author: Michel Peltriaux
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 19.08.21

"""
from django.core.management import BaseCommand

from intervention.models import Intervention


class Command(BaseCommand):
    help = "Performs test on collisions using the identifier generation"

    def handle(self, *args, **options):
        identifiers = {}
        max_iterations = 100000
        try:
            collisions = 0
            len_ids = len(identifiers)
            while len_ids < max_iterations:
                tmp_intervention = Intervention()
                _id = tmp_intervention.generate_new_identifier()
                len_ids = len(identifiers)
                if _id not in identifiers:
                    if len_ids % (max_iterations/5) == 0:
                        print(len_ids)
                    identifiers[_id] = None
                else:
                    collisions += 1
                    print("+++ Collision after {} identifiers +++".format(len_ids))

        except KeyboardInterrupt:
            self._break_line()
            exit(-1)
        print(
            "\n{} collisions in {} identifiers; Collision rate {}%".format(
                collisions,
                len_ids,
                (collisions / len_ids)*100,
            )
        )

    def _break_line(self):
        """ Simply prints a line break

        Returns:

        """
        self.stdout.write("\n")