import os

from datetime import datetime, timedelta
from tempfile import NamedTemporaryFile

from config import DefaultConfig


class FakeTransaction(object):
  def __enter__(self):
    return self

  def __exit__(self, exc_type, value, traceback):
    pass


TEST_DB_FILE = NamedTemporaryFile(delete=True)


class TestConfig(DefaultConfig):
  TESTING = True
  SECRET_KEY = 'a36c9d7d-25a9-4d3f-a586-3d2f8dc40a83'
  BILLING_TYPE = 'FakeStripe'

  TEST_DB_FILE = TEST_DB_FILE
  DB_URI = os.environ.get('TEST_DATABASE_URI', 'sqlite:///{0}'.format(TEST_DB_FILE.name))
  DB_CONNECTION_ARGS = {
    'threadlocals': True,
    'autorollback': True
  }

  @staticmethod
  def create_transaction(db):
    return FakeTransaction()

  DB_TRANSACTION_FACTORY = create_transaction

  DISTRIBUTED_STORAGE_CONFIG = {'local_us': ['FakeStorage', {}], 'local_eu': ['FakeStorage', {}]}
  DISTRIBUTED_STORAGE_PREFERENCE = ['local_us']

  BUILDLOGS_MODULE_AND_CLASS = ('test.testlogs', 'testlogs.TestBuildLogs')
  BUILDLOGS_OPTIONS = ['devtable', 'building', 'deadbeef-dead-beef-dead-beefdeadbeef', False]

  USERFILES_LOCATION = 'local_us'

  FEATURE_SUPER_USERS = True
  FEATURE_BILLING = True
  FEATURE_MAILING = True
  SUPER_USERS = ['devtable']

  LICENSE_USER_LIMIT = 500
  LICENSE_EXPIRATION = datetime.now() + timedelta(weeks=520)
  LICENSE_EXPIRATION_WARNING = datetime.now() + timedelta(weeks=520)

  FEATURE_GITHUB_BUILD = True

  CLOUDWATCH_NAMESPACE = None

  FEATURE_SECURITY_SCANNER = True
  SECURITY_SCANNER = {
    'ENDPOINT': 'http://localhost/some/invalid/path',
    'ENGINE_VERSION_TARGET': 1,
    'API_CALL_TIMEOUT': 1
  }