#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Конфигурационный файл для Nano Banana Telegram Bot
"""

import os
from typing import Optional
from dotenv import load_dotenv

# Загружаем переменные окружения
load_dotenv()

class Config:
    """Класс конфигурации бота"""
    
    # Telegram настройки
    TELEGRAM_BOT_TOKEN: Optional[str] = os.getenv('TELEGRAM_BOT_TOKEN', '8445335004:AAGTfKA3eWSU9Cy-EAv5LVA0JIieBu-6iTA')
    
    # Nano Banana API настройки (используем Google Gemini для анализа)
    NANO_BANANA_API_URL: str = os.getenv('NANO_BANANA_API_URL', 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent')
    NANO_BANANA_API_KEY: Optional[str] = os.getenv('NANO_BANANA_API_KEY', 'AIzaSyAS7dLKgfoqGyq70NznGD45fbf6HRWIDzw')
    
    # Настройки обработки
    MAX_PHOTOS_IN_ALBUM: int = 2
    MIN_PHOTOS_IN_ALBUM: int = 2
    ALBUM_PROCESSING_DELAY: float = 2.0  # секунды
    API_TIMEOUT: int = 300  # секунды (5 минут)
    CLEANUP_INTERVAL: int = 3600  # секунды (1 час)
    ALBUM_EXPIRY_TIME: int = 3600  # секунды (1 час)
    
    # Настройки файлов
    TEMP_PHOTOS_DIR: str = 'temp_photos'
    MAX_FILE_SIZE: int = 20 * 1024 * 1024  # 20 MB
    
    # Настройки логирования
    LOG_LEVEL: str = os.getenv('LOG_LEVEL', 'INFO')
    LOG_FORMAT: str = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    
    # Настройки API запросов
    DEFAULT_MODEL: str = 'gemini-2.5-pro'
    DEFAULT_MAX_TOKENS: int = 2048
    DEFAULT_TEMPERATURE: float = 0.7
    
    # Настройки прокси
    USE_PROXY: bool = True  # Включение прокси для обхода блокировки Google в России
    PROXY_LOGIN: str = 'ttNkVLRS'
    PROXY_PASS: str = '63cYXNdr'
    PROXY_SERVER: str = '45.128.56.184'
    PROXY_PORT: str = '64826'
    PROXY_URL: str = f'http://{PROXY_LOGIN}:{PROXY_PASS}@{PROXY_SERVER}:{PROXY_PORT}'
    
    # Администраторы бота
    ADMIN_IDS: list = [23916354, 123456789]  # 23916354 - @naurbievm (основной админ)
    
    # Hugging Face API настройки
    HUGGING_FACE_API_TOKEN: Optional[str] = os.getenv('HUGGING_FACE_API_TOKEN')
    HUGGING_FACE_API_URL: str = 'https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-xl-base-1.0'
    
    # Сообщения бота
    MESSAGES = {
        'welcome': """
🤖 <b>Добро пожаловать в AI-ИЛЛЮСТРАТОР!</b>

🎨 <b>Что я умею:</b>
• <b>Текст → Изображение:</b> Напишите описание → получите изображение
• <b>Фото → Новое изображение:</b> Отправьте фото с подписью → получите новое изображение в том же стиле
• <b>Альбом → Новое изображение:</b> Отправьте несколько фото с подписью → получите изображение на основе референсов

📋 <b>Как использовать:</b>
1. <b>Просто текст:</b> Напишите "красивый закат" → получите изображение заката
2. <b>Одно фото:</b> Отправьте фото кота с подписью "кот в космосе" → получите кота в космосе в стиле вашего фото
3. <b>Альбом фото:</b> Отправьте несколько фото с подписью "пейзаж в стиле импрессионизма" → получите пейзаж
4. <b>Фото + текст:</b> Отправьте фото с промптом → получите новую сцену с теми же людьми

💡 <b>Примеры промптов:</b>
• "красивая девушка в платье на пляже"
• "мужчина в костюме в офисе" 
• "два человека танцуют на вечеринке"

🎯 <b>Особенность:</b> Бот анализирует людей на ваших фотографиях и создает новые изображения с теми же людьми в новых сценариях!

⚡ <b>Начните прямо сейчас</b> - отправьте фото с промптом!
        """,
        
        'wrong_photo_count': "❌ Получено {count} фотографий. Пожалуйста, отправьте ровно 2 фотографии в альбоме.",
        'no_caption': "❌ Пожалуйста, добавьте промпт к фотографии (описание желаемого изображения).",
        'not_album': "❌ Пожалуйста, отправьте фотографии как альбом (выберите несколько фото одновременно)",
        'processing': "🔄 Обрабатываю ваши фотографии и отправляю запрос в Nano Banana AI...\n⏳ Это может занять несколько минут.",
        'success': "✅ Генерация завершена!\n\n📝 Ваш запрос: {caption}\n\n🎨 Результат:\n{result}",
        'api_error': "❌ Ошибка при генерации: {error}",
        'rate_limit_error': "⏳ Превышен лимит запросов к Google Gemini API. Попробуйте через несколько минут.",
        'general_error': "❌ Произошла ошибка при обработке ваших фотографий. Попробуйте еще раз.",
        'timeout_error': "❌ Превышено время ожидания ответа от API. Попробуйте еще раз.",
    }
    
    @classmethod
    def validate(cls) -> bool:
        """Проверка корректности конфигурации"""
        errors = []
        
        if not cls.TELEGRAM_BOT_TOKEN:
            errors.append("TELEGRAM_BOT_TOKEN не установлен")
            
        if not cls.NANO_BANANA_API_KEY:
            errors.append("NANO_BANANA_API_KEY не установлен")
            
        if cls.MAX_PHOTOS_IN_ALBUM < cls.MIN_PHOTOS_IN_ALBUM:
            errors.append("MAX_PHOTOS_IN_ALBUM должно быть >= MIN_PHOTOS_IN_ALBUM")
            
        if errors:
            for error in errors:
                print(f"❌ Ошибка конфигурации: {error}")
            return False
            
        return True
    
    @classmethod
    def get_message(cls, key: str, **kwargs) -> str:
        """Получение сообщения с подстановкой параметров"""
        message = cls.MESSAGES.get(key, "Неизвестное сообщение")
        try:
            return message.format(**kwargs)
        except KeyError as e:
            print(f"⚠️ Ошибка форматирования сообщения '{key}': отсутствует параметр {e}")
            return message

