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

from oscar.core.loading import get_model

Order = get_model("order", "Order")
CommunicationEventType = get_model("communication", "CommunicationEventType")


class Command(BaseCommand):
    help = "For testing the content of order emails"

    def add_arguments(self, parser):
        parser.add_argument("event_type", help="The CommunicationEventType")
        parser.add_argument("order_number", help="The Order number")

    def handle(self, *args, **options):
        try:
            order = Order.objects.get(number=options["order_number"])
        except Order.DoesNotExist:
            raise CommandError(
                "No order found with number %s" % options["order_number"]
            )

        ctx = {
            "order": order,
            "lines": order.lines.all(),
        }
        messages = CommunicationEventType.objects.get_and_render(
            options["event_type"], ctx
        )
        print(
            "Subject: %s\nBody:\n\n%s\nBody HTML:\n\n%s"
            % (messages["subject"], messages["body"], messages["html"])
        )
