"""
Основной скрипт для бота VK
"""

import os
import logging
import sys
from datetime import datetime, timedelta

# Добавляем путь к проекту
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# Импортируем компоненты
from src.post_manager import PostManager
from src.scheduler import Scheduler
from src.config import AppConfig

# Настраиваем логирование
logging.basicConfig(
    level=logging.DEBUG if AppConfig.DEBUG else logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler(f'{AppConfig.LOG_DIR}/main.log', encoding='utf-8'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

def main():
    """
    Основная функция
    """
    logger.info("Запуск бота VK")
    
    try:
        # Создаем менеджер публикаций
        post_manager = PostManager()
        
        # Создаем планировщик
        scheduler = Scheduler(post_manager)
        
        # Проверяем наличие токена
        if not os.getenv('VK_TOKEN') or os.getenv('VK_TOKEN') == 'your_vk_group_token_here':
            logger.error("Ошибка: VK_TOKEN не настроен в .env файле")
            logger.error("Пожалуйста, настройте .env файл с правильными значениями")
            return
        
        # Пример публикации новости
        title = "Внимание! Плановые отключения воды"
        content = "Уважаемые жители! Сообщаем о предстоящих плановых отключениях холодной воды.\n\nОтключения будут производиться в следующих районах:\n- Улица Ленина, 1-50\n- Улица Гагарина, 1-30\n- Микрорайон 79, дома 1-10\n\nВремя отключения: с 09:00 до 17:00\nДата: 15 февраля 2023 года\n\nПриносим свои извинения за временные неудобства."
        
        # Пути к изображениям (если есть)
        images = []  # ['media/news_image.jpg']
        
        # Хэштеги
        hashtags = ['#водоканал', '#отключения', '#Ангарск', '#важно']
        
        # Сайт и контакты
        website = "https://vodokanal-angarsk.ru"
        contacts = "📞 Телефон: +7 (3954) 55-12-01"
        
        # Публикуем сразу
        post_result = post_manager.create_post(
            title=title,
            content=content,
            images=images,
            hashtags=hashtags,
            website=website,
            contacts=contacts
        )
        
        if post_result['data']:
            # Добавляем owner_id из конфигурации
            post_result['data']['owner_id'] = post_manager.client.owner_id
            publish_result = post_manager.publish_post(post_result['data'])
            
            if publish_result['success']:
                logger.info(f"Новость успешно опубликована: post_id={publish_result['post_id']}")
            else:
                logger.error(f"Ошибка публикации: {publish_result['error']}")
        else:
            logger.error(f"Ошибка создания публикации: {post_result.get('error')}")
        
        # Планируем публикацию (пример)
        schedule_datetime = datetime.now() + timedelta(hours=1)
        schedule_result = post_manager.schedule_post(
            title="Напоминание: Отключения воды завтра",
            content="Напоминаем, что завтра с 09:00 до 17:00 будут производиться плановые отключения воды. Пожалуйста, запаситесь водой заранее.",
            publish_date=schedule_datetime,
            hashtags=hashtags,
            website=website,
            contacts=contacts
        )
        
        if schedule_result and schedule_result['success']:
            logger.info(f"Публикация запланирована на {schedule_datetime}")
        else:
            logger.error(f"Ошибка планирования: {schedule_result.get('error', 'Unknown error') if schedule_result else 'No result'}")
        
        if schedule_result and schedule_result['success']:
            logger.info(f"Публикация запланирована на {schedule_datetime}")
        else:
            logger.error(f"Ошибка планирования: {schedule_result.get('error', 'Unknown error') if schedule_result else 'No result'}")
        
        # Запускаем планировщик в фоновом режиме
        scheduler.start()
        
        logger.info("Планировщик запущен. Приложение работает в фоновом режиме.")
        
        # Ожидаем завершения (в реальности будет работать постоянно)
        try:
            while True:
                # В реальном приложении можно добавить проверку сигналов
                pass
        except KeyboardInterrupt:
            logger.info("Остановка приложения...")
            scheduler.stop()
            
    except Exception as e:
        logger.error(f"Критическая ошибка: {e}", exc_info=True)
        sys.exit(1)

if __name__ == "__main__":
    main()