import logging
import sys

from peewee import MySQLDatabase, SqliteDatabase


LOG_FORMAT = '%(asctime)-15s - %(levelname)s - %(pathname)s - ' + \
             '%(funcName)s - %(message)s'


class FlaskConfig(object):
  SECRET_KEY = '1cb18882-6d12-440d-a4cc-b7430fb5f884'


class MailConfig(object):
  MAIL_SERVER = 'email-smtp.us-east-1.amazonaws.com'
  MAIL_USE_TLS = True
  MAIL_PORT = 587
  MAIL_USERNAME = 'AKIAIXV5SDGCPVMU3N4Q'
  MAIL_PASSWORD = 'AhmX/vWE91uQ2RtcEKTkfNrzZehEjPNXOXeOXgQNfLao'
  DEFAULT_MAIL_SENDER = 'support@quay.io'
  MAIL_FAIL_SILENTLY = False
  TESTING = False


class SQLiteDB(object):
  DB_NAME = 'test/data/test.db'
  DB_CONNECTION_ARGS = {
    'threadlocals': True
  }
  DB_DRIVER = SqliteDatabase


class RDSMySQL(object):
  DB_NAME = 'quay'
  DB_CONNECTION_ARGS = {
    'host': 'fluxmonkeylogin.cb0vumcygprn.us-east-1.rds.amazonaws.com',
    'user': 'fluxmonkey',
    'passwd': '8eifM#uoZ85xqC^',
    'threadlocals': True,
  }
  DB_DRIVER = MySQLDatabase


class S3Storage(object):
  AWS_ACCESS_KEY = 'AKIAJWZWUIS24TWSMWRA'
  AWS_SECRET_KEY = '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'
  REGISTRY_S3_BUCKET = 'quay-registry'
  STORAGE_KIND = 's3'


class LocalStorage(object):
  STORAGE_KIND = 'local'
  LOCAL_STORAGE_DIR = 'test/data/registry'


class StripeTestConfig(object):
  STRIPE_SECRET_KEY = 'sk_test_PEbmJCYrLXPW0VRLSnWUiZ7Y'
  STRIPE_PUBLISHABLE_KEY = 'pk_test_uEDHANKm9CHCvVa2DLcipGRh'


class StripeLiveConfig(object):
  STRIPE_SECRET_KEY = 'sk_live_TRuTHYwTvmrLeU3ib7Z9hpqE'
  STRIPE_PUBLISHABLE_KEY = 'pk_live_P5wLU0vGdHnZGyKnXlFG4oiu'


class MixpanelTestConfig(object):
  MIXPANEL_KEY = '38014a0f27e7bdc3ff8cc7cc29c869f9'


class MixpanelProdConfig(object):
  MIXPANEL_KEY = '50ff2b2569faa3a51c8f5724922ffb7e'


class GitHubTestConfig(object):
  GITHUB_CLIENT_ID = 'cfbc4aca88e5c1b40679'
  GITHUB_CLIENT_SECRET = '7d1cc21e17e10cd8168410e2cd1e4561cb854ff9'
  GITHUB_TOKEN_URL = 'https://github.com/login/oauth/access_token'
  GITHUB_USER_URL = 'https://api.github.com/user'
  GITHUB_USER_EMAILS = GITHUB_USER_URL + '/emails'


class GitHubProdConfig(GitHubTestConfig):
  GITHUB_CLIENT_ID = '5a8c08b06c48d89d4d1e'
  GITHUB_CLIENT_SECRET = 'f89d8bb28ea3bd4e1c68808500d185a816be53b1'


class DebugConfig(FlaskConfig, MailConfig, LocalStorage, SQLiteDB,
                  StripeTestConfig, MixpanelTestConfig, GitHubTestConfig):
  REGISTRY_SERVER = 'localhost:5000'
  LOGGING_CONFIG = {
    'level': logging.DEBUG,
    'format': LOG_FORMAT
  }
  SEND_FILE_MAX_AGE_DEFAULT = 0
  POPULATE_DB_TEST_DATA = True


class LocalHostedConfig(FlaskConfig, MailConfig, S3Storage, RDSMySQL,
                        StripeLiveConfig, MixpanelTestConfig,
                        GitHubProdConfig):
  REGISTRY_SERVER = 'localhost:5000'
  LOGGING_CONFIG = {
    'level': logging.DEBUG,
    'format': LOG_FORMAT
  }
  SEND_FILE_MAX_AGE_DEFAULT = 0


class ProductionConfig(FlaskConfig, MailConfig, S3Storage, RDSMySQL,
                       StripeLiveConfig, MixpanelProdConfig,
                       GitHubProdConfig):
  REGISTRY_SERVER = 'quay.io'
  LOGGING_CONFIG = {
    'stream': sys.stderr,
    'level': logging.DEBUG,
    'format': LOG_FORMAT,
    'filename': 'application.log',
  }
  SEND_FILE_MAX_AGE_DEFAULT = 0