import math
import stripe
from lionclaw.settings import STRIPE_SECRET
from lionclaw.configuration.models import Configuration
from lionclaw.checkout.errors import PaymentError
from lionclaw.checkout.gateways import BasePayment


class StripePayment(BasePayment):
    """
    Create a payment using stripe
    """
    def __init__(self):
        stripe.api_key = STRIPE_SECRET

    def create_payment(self, request, amount, description=''):
        try:
            currency = Configuration.for_site(request.site).currency
            charge = stripe.Charge.create(
                amount=int(math.ceil(amount * 100)),  # Amount in pence
                currency=currency.lower(),
                source=request.data['token'],
                description=description
            )
            return charge.id
        except stripe.error.CardError as error:
            raise PaymentError(error)

    def get_token(self, request):
        """ Create a stripe token for a card
        """
        return stripe.Token.create(
            card={
                "number": request.data["number"],
                "exp_month": request.data["exp_month"],
                "exp_year": request.data["exp_year"],
                "cvc": request.data["cvc"]

            }
        )

    def issue_refund(self, identifier, amount):
        result = stripe.Refund.create(
            charge=identifier,
            amount=int(math.ceil(amount * 100))
        )
        return result.status == 'succeeded'
