import os
import json
import dotenv
import logging
import logging.config
from pythonjsonlogger import jsonlogger

# https://hackersandslackers.com/configure-flask-applications/
#

app_root = os.path.dirname(os.path.abspath(__file__))
credentials_directory = os.path.join(app_root, '../instances')

# REPLACE CREDENTIALS.env WITH CORRECT FILE NAME
dotenv.load_dotenv(os.path.join(credentials_directory, 'CREDENTIALS.env'))
db_creds_path = os.path.join(credentials_directory, 'dbcreds.json')

class Config:
    APP_NAME = 'APP_NAME'
    APP_ROOT = app_root
    SECRET_KEY = os.environ.get('SECRET_KEY')
    FLASK_ENV = os.environ.get('FLASK_ENV')
    FORMATTER = jsonlogger.JsonFormatter('%(asctime)s %(name)s %(levelname)s %(lineno)s %(message)s', static_fields={'app_name': '[{}]'.format(APP_NAME)})

    DB_CREDS = {}
    with open(db_creds_path, 'r') as in_file:
        DB_CREDS = json.load(in_file)

class ProdConfig( Config ):
    LOGGER = None
    DEBUG = False
    TESTING = False

class LocalConfig( Config ):
    DEBUG = True
    TESTING = True

    log_path = os.path.join(Config.APP_ROOT, 'logs')
    log_filename = os.path.join(log_path, '{}_local.log'.format(Config.APP_NAME))

    LOGGER = logging.getLogger(__name__)
    logging.basicConfig(level=logging.INFO)
    #LOGGER = logging.getLogger('{}'.format(Config.APP_NAME))
    logger_file_handler = logging.FileHandler(log_filename)
    logger_file_handler.setLevel(logging.INFO)
    formatter = Config.FORMATTER
    logger_file_handler.setFormatter(formatter)
    LOGGER.addHandler(logger_file_handler)
    LOGGER.setLevel(logging.DEBUG)

