import time

from django.core.management.base import BaseCommand

from misago.categories.models import Category
from misago.core.management.progressbar import show_progress


class Command(BaseCommand):
    help = 'Synchronizes categories'

    def handle(self, *args, **options):
        categories_to_sync = Category.objects.count()

        message = 'Synchronizing %s categories...\n'
        self.stdout.write(message % categories_to_sync)

        message = '\n\nSynchronized %s categories in %s'

        start_time = time.time()

        synchronized_count = 0
        show_progress(self, synchronized_count, categories_to_sync)
        for category in Category.objects.iterator():
            category.synchronize()
            category.save()

            synchronized_count += 1
            show_progress(self, synchronized_count, categories_to_sync)

        end_time = time.time() - start_time
        total_time = time.strftime('%H:%M:%S', time.gmtime(end_time))

        self.stdout.write(message % (synchronized_count, total_time))
