from decouple import config

class Config: 
  
    DEBUG = True
    SECRET_KEY = config('FLASK_SECRET_KEY', default='secret_key', cast=str)

    # Database settings  
    MONGODB_SETTINGS = {
        'db': config('MONGODB_DB', default='account', 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)
    } 

    # Security settings 
    SECRET_KEY = config('SECRET_KEY', default='hMB2o~H`O7:i#5&hd`AQb#JU0YOe~wjQ', cast=str)
    JSON_SORT_KEYS = False
    JSONIFY_PRETTYPRINT_REGULAR = True

    JWT_SECRET_KEY =  config("JWT_SECRET_KEY",default="",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)

    # Email settings
    MAIL_SERVER = config('MAIL_SERVER', default='smtp.gmail.com')
    MAIL_PORT = config('MAIL_PORT', default=587, cast=int)
    MAIL_USERNAME = config('MAIL_USERNAME', default='brahimbellahcen1996@gmail.com')
    MAIL_PASSWORD = config('MAIL_PASSWORD', default='wewqkcxkkuwjnffy')
    MAIL_USE_TLS = config('MAIL_USE_TLS', default=True, cast=bool)
    MAIL_USE_SSL = config('MAIL_USE_SSL', default=False, cast=bool)
    MAIL_DEFAULT_SENDER = config('MAIL_USERNAME', default='brahimbellahcen1996@gmail.com')

    # Logging settings
    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,
}
