#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Конфигурация для AI-КАЛОРИЯ бота
"""

import os
from typing import Optional
from dotenv import load_dotenv

# Загрузка переменных окружения из .env файла
load_dotenv()

class Config:
    """Класс конфигурации приложения"""
    
    # Telegram Bot Token
    BOT_TOKEN: str = os.getenv('TELEGRAM_BOT_TOKEN', '')
    
    # OpenAI API Key
    OPENAI_API_KEY: str = os.getenv('OPENAI_API_KEY', '')
    
    # База данных
    DATABASE_URL: str = os.getenv('DATABASE_URL', 'sqlite:///ai_calories.db')
    
    # Настройки логирования
    LOG_LEVEL: str = os.getenv('LOG_LEVEL', 'INFO')
    LOG_FILE: str = os.getenv('LOG_FILE', 'ai_calories_bot.log')
    
    # Настройки OpenAI
    OPENAI_MODEL: str = os.getenv('OPENAI_MODEL', 'gpt-3.5-turbo')
    OPENAI_MAX_TOKENS: int = int(os.getenv('OPENAI_MAX_TOKENS', '1000'))
    OPENAI_TEMPERATURE: float = float(os.getenv('OPENAI_TEMPERATURE', '0.3'))
    
    # Настройки голосового распознавания
    WHISPER_MODEL: str = os.getenv('WHISPER_MODEL', 'whisper-1')
    
    # Настройки базы данных
    DB_POOL_SIZE: int = int(os.getenv('DB_POOL_SIZE', '10'))
    DB_MAX_OVERFLOW: int = int(os.getenv('DB_MAX_OVERFLOW', '20'))
    
    # Настройки бота
    BOT_TIMEOUT: int = int(os.getenv('BOT_TIMEOUT', '10'))
    BOT_LONG_POLLING_TIMEOUT: int = int(os.getenv('BOT_LONG_POLLING_TIMEOUT', '5'))
    
    # Настройки прокси
    PROXY_SERVER: str = os.getenv('PROXY_SERVER', '45.128.56.184')
    PROXY_PORT: int = int(os.getenv('PROXY_PORT', '64826'))
    PROXY_LOGIN: str = os.getenv('PROXY_LOGIN', 'ttNkVLRS')
    PROXY_PASS: str = os.getenv('PROXY_PASS', '63cYXNdr')
    USE_PROXY: bool = os.getenv('USE_PROXY', 'true').lower() == 'true'
    
    # Настройки обработки сообщений
    MAX_MESSAGE_LENGTH: int = int(os.getenv('MAX_MESSAGE_LENGTH', '4000'))
    VOICE_MAX_DURATION: int = int(os.getenv('VOICE_MAX_DURATION', '60'))  # секунды
    
    # Настройки статистики
    STATS_DAYS: int = int(os.getenv('STATS_DAYS', '30'))
    HISTORY_LIMIT: int = int(os.getenv('HISTORY_LIMIT', '50'))
    
    @classmethod
    def validate(cls) -> bool:
        """Проверяет корректность конфигурации"""
        errors = []
        
        if not cls.BOT_TOKEN:
            errors.append("TELEGRAM_BOT_TOKEN не установлен")
        
        if not cls.OPENAI_API_KEY:
            errors.append("OPENAI_API_KEY не установлен")
        
        if errors:
            print("❌ Ошибки конфигурации:")
            for error in errors:
                print(f"  - {error}")
            return False
        
        return True
    
    @classmethod
    def get_database_config(cls) -> dict:
        """Возвращает конфигурацию базы данных"""
        return {
            'url': cls.DATABASE_URL,
            'pool_size': cls.DB_POOL_SIZE,
            'max_overflow': cls.DB_MAX_OVERFLOW,
            'echo': cls.LOG_LEVEL == 'DEBUG'
        }
    
    @classmethod
    def get_openai_config(cls) -> dict:
        """Возвращает конфигурацию OpenAI"""
        return {
            'api_key': cls.OPENAI_API_KEY,
            'model': cls.OPENAI_MODEL,
            'max_tokens': cls.OPENAI_MAX_TOKENS,
            'temperature': cls.OPENAI_TEMPERATURE,
            'whisper_model': cls.WHISPER_MODEL
        }
    
    @classmethod
    def get_bot_config(cls) -> dict:
        """Возвращает конфигурацию бота"""
        return {
            'token': cls.BOT_TOKEN,
            'timeout': cls.BOT_TIMEOUT,
            'long_polling_timeout': cls.BOT_LONG_POLLING_TIMEOUT
        }
    
    @classmethod
    def get_proxy_config(cls) -> dict:
        """Возвращает конфигурацию прокси"""
        return {
            'server': cls.PROXY_SERVER,
            'port': cls.PROXY_PORT,
            'login': cls.PROXY_LOGIN,
            'password': cls.PROXY_PASS,
            'enabled': cls.USE_PROXY
        }

# Экспорт основных настроек
BOT_TOKEN = Config.BOT_TOKEN
OPENAI_API_KEY = Config.OPENAI_API_KEY
DATABASE_URL = Config.DATABASE_URL
