import logging
import os
import stripe

from flask import Flask
from flask.ext.principal import Principal
from flask.ext.login import LoginManager
from flask.ext.mail import Mail

from config import (ProductionConfig, DebugConfig, LocalHostedConfig,
                    TestConfig, StagingConfig)
from util import analytics


app = Flask(__name__)
logger = logging.getLogger(__name__)


stack = os.environ.get('STACK', '').strip().lower()
if stack.startswith('prod'):
  logger.info('Running with production config.')
  config = ProductionConfig()
elif stack.startswith('staging'):
  logger.info('Running with staging config on production data.')
  config = StagingConfig()
elif stack.startswith('localhosted'):
  logger.info('Running with debug config on production data.')
  config = LocalHostedConfig()
elif stack.startswith('test'):
  logger.info('Running with test config on ephemeral data.')
  config = TestConfig()
else:
  logger.info('Running with debug config.')
  config = DebugConfig()

app.config.from_object(config)

Principal(app, use_sessions=True)

login_manager = LoginManager()
login_manager.init_app(app)

mail = Mail()
mail.init_app(app)

stripe.api_key = app.config.get('STRIPE_SECRET_KEY', None)

mixpanel = app.config['ANALYTICS'].init_app(app)