from django.contrib import admin
from django.contrib import messages
from django.shortcuts import render
from django import forms

from .models import Schedule, MessageSet, Message, BinaryContent


class CloneMessageSetForm(forms.Form):
    short_name = forms.CharField(label='New short name', required=True)

    def clean_short_name(self):
        short_name = self.cleaned_data['short_name']
        if MessageSet.objects.filter(short_name=short_name).exists():
            raise forms.ValidationError(
                'A message set already exists with this name.')
        return short_name


class MessageSetAdmin(admin.ModelAdmin):

    actions = ['clone_messageset']

    def clone_messageset(self, request, queryset):
        if queryset.count() > 1:
            self.message_user(
                request, 'Only 1 message set can be cloned at a time.',
                level=messages.WARNING)
            return

        original = queryset.first()
        if 'do_action' in request.POST:
            form = CloneMessageSetForm(request.POST)
            if form.is_valid():
                new_short_name = form.cleaned_data['short_name']

                # NOTE: setting the PK to `None` results in a new record being
                # #     created
                clone = queryset.first()
                clone.pk = None
                clone.short_name = new_short_name
                clone.save()

                for cloned_message in original.messages.all():
                    cloned_message.pk = None
                    cloned_message.messageset = clone
                    cloned_message.save()

                self.message_user(request, 'Cloned the message set')
                return
        else:
            form = CloneMessageSetForm()

        return render(request, 'contentstore/messageset/clone_messageset.html', {
            'title': u'Clone message set: %s' % (original,),
            'object': original,
            'form': form,
        })
    clone_messageset.short_description = 'Clone selected message set'


admin.site.register(Schedule)
admin.site.register(MessageSet, MessageSetAdmin)
admin.site.register(Message)
admin.site.register(BinaryContent)

@@ -1782,16 +1782,29 @@
  render(
+%0A            
 request,
@@ -1856,11 +1856,27 @@
 ml',
- %7B%0A
+%0A            %7B%0A    
     
@@ -1944,16 +1944,20 @@
         
+    
 'object'
@@ -1980,16 +1980,20 @@
         
+    
 'form': 
@@ -1998,16 +1998,20 @@
 : form,%0A
+    
         

fix flake8