from model_bakery import baker

from events.models import Event
from events.test_data import bulk_event_data, event_generator
from glitchtip.base_commands import MakeSampleCommand
from issues.models import Issue
from issues.tasks import update_search_index_issue
from organizations_ext.models import Organization
from projects.models import Project
from projects.tasks import update_event_project_hourly_statistic


class Command(MakeSampleCommand):
    help = "Create an issue with a large number of events for dev and demonstration purposes"

    def add_arguments(self, parser):
        super().add_arguments(parser)
        parser.add_argument("batch_size", nargs="?", type=int, default=10000)

    def handle(self, *args, **options):
        super().handle(*args, **options)
        issue_data = bulk_event_data.large_event
        title = issue_data.get("title")
        culprit = issue_data.get("culprit")
        metadata = issue_data.get("metadata")
        issue, _ = Issue.objects.get_or_create(
            title=title,
            culprit=culprit,
            metadata=metadata,
            project=self.project,
        )

        quantity = options["quantity"]
        batch_size = options["batch_size"]

        if quantity < batch_size:
            batches = 1
        else:
            batches = quantity // batch_size

        for _ in range(batches):
            if quantity < batch_size:
                batch_size = quantity
            event_list = []
            for _ in range(batch_size):
                event = Event(
                    data=event_generator.make_event_unique(bulk_event_data.large_event),
                    issue=issue,
                )
                event_list.append(event)
            Event.objects.bulk_create(event_list)
            quantity -= batch_size

        update_search_index_issue(args=[issue.pk])
        update_event_project_hourly_statistic(args=[self.project.pk, event.created])

        self.success_message('Successfully created "%s" events' % options["quantity"])