import os
from dotenv import load_dotenv

load_dotenv()

class Config:
    """Base configuration"""
    SECRET_KEY = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production')
    DEBUG = False
    TESTING = False
    
    # Flask settings
    JSON_SORT_KEYS = False
    JSONIFY_PRETTYPRINT_REGULAR = True
    MODEL_NAME = "gpt2"
    DEVICE = "cpu"  
    DATABASE_PATH = os.path.join(os.path.dirname(__file__), 'recipes.db')
    MAX_SEARCH_RESULTS = 10
    MAX_RECIPE_LENGTH = 500
    MIN_RECIPE_LENGTH = 100
    TEMPERATURE = 0.7
    TOP_P = 0.9

class DevelopmentConfig(Config):
    DEBUG = True
    TESTING = False

class ProductionConfig(Config):

    DEBUG = False
    DEVICE = "cuda" if os.getenv('USE_CUDA', False) else "cpu"

class TestingConfig(Config):

    DEBUG = True
    TESTING = True
    DATABASE_PATH = ':memory:'


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

def get_config(env=None):
    if env is None:
        env = os.getenv('FLASK_ENV', 'development')
    return config.get(env, config['default'])