import grok
from waeup.ikoba.interfaces import MessageFactory as _
from waeup.ikoba.browser.layout import IkobaPage
from waeup.ikoba.payments.interfaces import IPaymentGatewayService, IPayment
from waeup.ikoba.payments.payment import Payment, get_payment


grok.templatedir('templates')


class DemoCreditcardPaymentService(grok.GlobalUtility):
    """A demo payment gateway service.

    This one supports credit card payments.
    """
    grok.implements(IPaymentGatewayService)
    grok.name('demo_creditcard')

    title = _(u'Credit Card (Demo Payments)')

    def create_payment(self, payer, payment_item_list=[],  payee=None):
        """Create a payment.
        """
        payment = Payment()
        payment.gateway_service = 'demo_creditcard'  # must be grok.name above
        payment.payer_id = payer.payer_id
        # XXX: we should not have to store a payment before adding items
        site = grok.getSite()
        site['payments'][payment.payment_id] = payment
        for item in payment_item_list:
            payment.add_payment_item(item)
        return payment

    def next_step(self, payment_id):
        """Tell where to go next.

        Returns (context, view_name). Both may be none.
        """
        payment = get_payment(payment_id)
        if payment is None:
            return None, None
        return payment, 'demo_cc1'


class CreditCardStep1(IkobaPage):
    grok.context(IPayment)
    grok.name('demo_cc1')
    grok.require('waeup.Public')
    #grok.require('waeup.handleCustomer')
    label = "Enter Credit Card Details"
    grok.template('demo_cc_step1')
    pnav = 0

    def update(self):
        print "UPDATE"
