import logging
import requests
import stripe

from flask import (abort, redirect, request, url_for, render_template,
                   make_response)
from flask.ext.login import login_user, UserMixin, login_required
from flask.ext.principal import identity_changed, Identity, AnonymousIdentity

from data import model
from app import app, login_manager, mixpanel
from auth.permissions import QuayDeferredPermissionUser
from data.plans import USER_PLANS, BUSINESS_PLANS, get_plan
from util.invoice import renderInvoiceToHtml
from util.email import send_invoice_email

logger = logging.getLogger(__name__)


@app.route('/webhooks/stripe', methods=['POST'])
def stripe_webhook():
  request_data = request.get_json()
  logger.debug('Stripe webhook call: %s' % request_data)

  event_type = request_data['type'] if 'type' in request_data else None
  if event_type == 'charge.succeeded':
    data = request_data['data'] if 'data' in request_data else {}
    obj = data['object'] if 'object' in data else {}
    invoice_id = obj['invoice'] if 'invoice' in obj else None
    customer_id = obj['customer'] if 'customer' in obj else None

    if invoice_id and customer_id:
      # Find the user associated with the customer ID.
      user = model.get_user_or_org_by_customer_id(customer_id)
      if user and user.invoice_email:
         # Lookup the invoice.
         invoice = stripe.Invoice.retrieve(invoice_id)
         if invoice:
           invoice_html = renderInvoiceToHtml(invoice, user)
           send_invoice_email(user.email, invoice_html)

  return make_response('Okay')
