from django.core.management.base import NoArgsCommand
from django.template import RequestContext, Context, loader
from django.contrib.sites.models import Site

SUBJECT = "%(site)s proposal #%(prop_id)i decision"
TEMPLATE = { 'A': 'propmgr/email/proposal_accepted.txt',
             'D': 'propmgr/email/proposal_declined.txt' }

class Command(NoArgsCommand):
    help = ''

    def handle_noargs(self, **options):
        from django.db import models
        from django.conf import settings
        from pycon.core import mail
        if not hasattr(settings, 'PROPMGR_FROM_EMAIL'):
            raise CommandError(
                "Could not find PROPMGR_FROM_EMAIL in settings.")
        try:
            app = models.get_app('propmgr')
        except (ImproperlyConfigured, ImportError), e:
            raise CommandError(
                "%s. Are you sure your INSTALLED_APPS setting is correct?" % e)

        for key, val in TEMPLATE.iteritems():
            TEMPLATE[key] = loader.get_template(val)

        proposals = app.Proposal.objects.filter(published=False,
                                                status__in=['A', 'D'])
        mailings = []
        base = {'from_email': settings.PROPMGR_FROM_EMAIL,
                'replyto_email': getattr(settings,'PROPMGR_FROM_EMAIL',None)}
        print "Rendering messages"
        for  prop in proposals:
            author_emails = [ prop.submitter.email ]
            author_emails.extend(auth.email for auth in prop.coauthors.all())
            t = TEMPLATE[prop.status]
            message = t.render(Context({ 'proposal': prop,
                                         'settings': settings }))
            mailing = {'subject': (SUBJECT % {
                            'site': getattr(settings, 'CONFERENCE_NAME', ''),
                            'prop_id': prop.id}),
                       'body': message,
                       'to': author_emails
            }
            mailing.update(base)
            mailings.append(mailing)
        print "Sending messages"
        sent = mail.send_mass_mail(mailings)
        print "Sent", sent, "messages."
        print "Marking proposals published."
        for prop in proposals:
            prop.published = True
            prop.save()
        print "Marked", len(proposals), "proposals published."
