from decouple import config

class JWTConfig:
    SECRET_KEY = config('SECRET_KEY', default='hMB2o~H`O7:i#5&hd`AQb#JU0YOe~wjQ', cast=str)
    JWT_SECRET_KEY = config("JWT_SECRET_KEY", default="ac07f16776441c0e09a517d642c16d781647c44cf0fa135b7483d5e15e66866e", cast=str)
    JWT_ACCESS_TOKEN_EXPIRES = config("JWT_ACCESS_TOKEN_EXPIRED", default=3600, cast=int)
    JWT_REFRESH_TOKEN_EXPIRES = config("JWT_REFRESH_TOKEN_EXPIRES", default=2592000, cast=int)
    JWT_TOKEN_LOCATION = config("JWT_TOKEN_LOCATION", default=['headers'])
    JWT_HEADER_TYPE = "Bearer"
    JWT_COOKIE_SECURE = False
    JWT_HEADER_NAME = "Authorization"

class Config(JWTConfig):

    DEBUG = config('FLASK_DEBUG', default=True, cast=bool)
    SECRET_KEY = config('FLASK_SECRET_KEY', default='secret_key', cast=str)
    JSON_SORT_KEYS = False
    JSONIFY_PRETTYPRINT_REGULAR = True
 
    MONGODB_SETTINGS = {
        'db': config('MONGODB_DB', default='database_name', cast=str),
        'host': config('MONGODB_HOST', default='database_host', cast=str),
        # 'username': config('MONGODB_HOST', default='', cast=str) ,
        # 'password': config('MONGODB_PASSWORD', default='', cast=str),
        'authentication_source': config('MONGODB_AUTH_SOURCE', default='admin', cast=str),
        'connect': config('MONGODB_CONNECT', default=False, cast=bool) 
    } 

    LOG_FILE = config('LOG_FILE', default='app.log', cast=str) 

class ProductionConfig(Config):

    DEBUG = False
    MONGODB_SETTINGS = {
        'db': config('MONGODB_DB', default='database_name', cast=str),
        'host': config('MONGODB_HOST', default='database_host', cast=str),
        # 'username': config('MONGODB_HOST', default='', cast=str) ,
        # 'password': config('MONGODB_PASSWORD', default='', cast=str),
        'authentication_source': config('MONGODB_AUTH_SOURCE', default='admin', cast=str),
        'connect': config('MONGODB_CONNECT', default=False, cast=bool) 
    } 

class DevelopmentConfig(Config):

    DEBUG = True
    MONGODB_SETTINGS = {
        'db': config('MONGODB_DB', default='database_name', cast=str),
        'host': config('MONGODB_HOST', default='database_host', cast=str),
        # 'username': config('MONGODB_HOST', default='', cast=str) ,
        # 'password': config('MONGODB_PASSWORD', default='', cast=str),
        'authentication_source': config('MONGODB_AUTH_SOURCE', default='admin', cast=str),
        'connect': config('MONGODB_CONNECT', default=False, cast=bool) 
    } 

class TestingConfig(Config):
    TESTING = True
    DEBUG = True
    MONGODB_SETTINGS = {
        'db': "pige_testing",
        'host': config('MONGODB_HOST', default='database_host', cast=str),
        # 'username': config('MONGODB_HOST', default='', cast=str) ,
        # 'password': config('MONGODB_PASSWORD', default='', cast=str),
        'authentication_source': config('MONGODB_AUTH_SOURCE', default='admin', cast=str),
        'connect': config('MONGODB_CONNECT', default=False, cast=bool) 
    } 

config_dict = {
    'production': ProductionConfig,
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'default': DevelopmentConfig,
}

