from data import model
from data.database import User
from app import billing as stripe
from data.plans import get_plan

def get_private_allowed(customer):
  if not customer.stripe_id:
    return 0

  subscription = stripe.Customer.retrieve(customer.stripe_id).get('subscription', None)
  if subscription is None:
    return 0

  plan = get_plan(subscription.plan.id)
  return plan['privateRepos']

# Find customers who have more private repositories than their plans allow
users = User.select()

usage = [(user.username, model.get_private_repo_count(user.username),
          get_private_allowed(user)) for user in users]

for username, used, allowed in usage:
  if used > allowed:
    print('Violation: %s %s > %s' % (username, used, allowed))