import os
import sys
import logging
import configparser
from pathlib import Path
from typing import List
from docx import Document
from openai import OpenAI

# Настройка логирования
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(message)s',
    handlers=[
        logging.StreamHandler(sys.stdout),
        logging.FileHandler("automation.log", encoding='utf-8')
    ]
)
logger = logging.getLogger(__name__)

def load_config(config_path: str) -> str:
    config = configparser.ConfigParser()
    if not os.path.exists(config_path):
        logger.critical(f"Файл конфигурации '{config_path}' не найден.")
        sys.exit(1)
    config.read(config_path, encoding='utf-8')
    try:
        api_key = config['API']['openrouter_api_key']
        if not api_key:
            raise ValueError
        logger.info("API-ключ успешно загружен из конфигурации.")
        return api_key
    except (KeyError, ValueError):
        logger.critical("API-ключ не найден в файле конфигурации.")
        sys.exit(1)

def read_docx(file_path: Path) -> str:
    try:
        document = Document(file_path)
        text = "\n".join([para.text for para in document.paragraphs])
        logger.debug(f"Файл '{file_path}' успешно прочитан.")
        return text
    except Exception as e:
        logger.error(f"Ошибка при чтении файла '{file_path}': {e}")
        return ""

def get_all_docx_files(directory: Path) -> List[Path]:
    return list(directory.rglob("*.docx"))

def generate_content(api_key: str, prompt: str, max_tokens: int = 1000, temperature: float = 0.7) -> str:
    try:
        client = OpenAI(
            base_url="https://openrouter.ai/api/v1",
            api_key=api_key,
        )
        completion = client.chat.completions.create(
            model="openai/gpt-3.5-turbo",
            messages=[
                {
                    "role": "user",
                    "content": prompt
                }
            ],
            max_tokens=max_tokens,
            temperature=temperature
        )
        logger.debug("Контент успешно сгенерирован.")
        return completion.choices[0].message.content
    except Exception as e:
        logger.error(f"Ошибка при генерации контента: {e}")
        return ""

def save_docx(content: str, file_path: Path) -> None:
    try:
        document = Document()
        for line in content.split('\n'):
            document.add_paragraph(line)
        document.save(file_path)
        logger.info(f"Сохранено: '{file_path}'")
    except Exception as e:
        logger.error(f"Ошибка при сохранении файла '{file_path}': {e}")

def main():
    base_dir = Path(__file__).parent.resolve()
    assignment_dir = base_dir / "Задание"
    context_dir = base_dir / "База с контекстом"
    output_dir = base_dir / "Папка с готовыми лекциями"
    config_path = base_dir / "config.ini"

    api_key = load_config(str(config_path))

    assignment_files = get_all_docx_files(assignment_dir)
    context_files = get_all_docx_files(context_dir)

    if not assignment_files:
        logger.warning(f"В папке '{assignment_dir}' не найдено файлов .docx для заданий.")
    if not context_files:
        logger.warning(f"В папке '{context_dir}' не найдено файлов .docx для контекста.")

    context_text = ""
    for ctx_file in context_files:
        ctx_content = read_docx(ctx_file)
        context_text += f"\n{ctx_content}"

    for assignment_file in assignment_files:
        logger.info(f"Обработка задания: '{assignment_file}'")
        task_text = read_docx(assignment_file)
        if not task_text.strip():
            logger.warning(f"Задание в файле '{assignment_file}' пустое. Пропуск.")
            continue

        prompt = f"{context_text}\n\nЗадание:\n{task_text}\n\nПожалуйста, выполните задание выше согласно предоставленным инструкциям."

        generated_content = generate_content(api_key, prompt)

        if not generated_content:
            logger.warning(f"Не удалось сгенерировать контент для задания '{assignment_file}'. Пропуск.")
            continue

        relative_path = assignment_file.relative_to(assignment_dir).with_suffix('.docx')
        output_file = output_dir / relative_path

        output_file.parent.mkdir(parents=True, exist_ok=True)

        save_docx(generated_content, output_file)

    logger.info("Автоматизация завершена успешно.")

if __name__ == "__main__":
    main()

print("Код выполнен успешно.") внеси рекомендованные правки