import random
from cryptography.fernet import Fernet
from flask import Flask


def generate_api_key(prefix="EveAI-Chat"):
    parts = [str(random.randint(1000, 9999)) for _ in range(8)]
    return f"{prefix}-{'-'.join(parts)}"


class SimpleEncryption:
    def __init__(self, app: Flask = None):
        self.app = app
        self.fernet = None
        if app is not None:
            self.init_app(app)

    def init_app(self, app: Flask):
        self.app = app
        encryption_key = app.config.get('API_ENCRYPTION_KEY')
        if not encryption_key:
            raise ValueError("ENCRYPTION_KEY is not set in the app configuration")
        self.fernet = Fernet(encryption_key.encode())

        # Optionally log the initialization (similar to your current setup)
        app.logger.info('SimpleEncryption initialized')

    def encrypt_api_key(self, api_key: str) -> str:
        if not self.fernet:
            raise RuntimeError("SimpleEncryption is not initialized. Call init_app first.")
        return self.fernet.encrypt(api_key.encode()).decode()

    def decrypt_api_key(self, encrypted_api_key: str) -> str:
        if not self.fernet:
            raise RuntimeError("SimpleEncryption is not initialized. Call init_app first.")
        return self.fernet.decrypt(encrypted_api_key.encode()).decode()

    @staticmethod
    def generate_key() -> str:
        """Generate a new Fernet key."""
        return Fernet.generate_key().decode()

# Usage:
# from common.utils.simple_encryption import simple_encryption
# simple_encryption.init_app(app)
