from django.core.management.base import BaseCommand, CommandError

from photologue.models import ImageModel, PhotoSize


class Command(BaseCommand):

    help = 'Manages Photologue cache file for the given sizes.'

    def add_arguments(self, parser):
        parser.add_argument('sizes',
                            nargs='*',
                            type=str,
                            help='Name of the photosize.')
        parser.add_argument('--reset',
                            action='store_true',
                            default=False,
                            dest='reset',
                            help='Reset photo cache before generating.')

    def handle(self, *args, **options):
        reset = options['reset']
        sizes = options['sizes']

        if not sizes:
            photosizes = PhotoSize.objects.all()
        else:
            photosizes = PhotoSize.objects.filter(name__in=sizes)

        if not len(photosizes):
            raise CommandError('No photo sizes were found.')

        print('Caching photos, this may take a while...')

        for cls in ImageModel.__subclasses__():
            for photosize in photosizes:
                print('Cacheing %s size images' % photosize.name)
                for obj in cls.objects.all():
                    if reset:
                        obj.remove_size(photosize)
                    obj.create_size(photosize)