#!/usr/bin/env python3
"""
Запуск шага 5 с путями по умолчанию: мерж анализа (2b) и валидированных тегов (4).
Без вызова LLM — только слияние JSON. Использует merge_analysis_tags.merge_analysis_and_tags.
Вход по умолчанию: merge.json (1), validated_tags.json (4), вход_главы.json (1).
Выход по умолчанию: merged_with_tags.json в каталоге скрипта.
"""

import argparse
import json
import sys
from pathlib import Path

DIR = Path(__file__).resolve().parent
DEFAULT_ANALYSIS = DIR.parent / "1_анализ_главы" / "merge.json"
DEFAULT_TAGS = DIR.parent / "4_валидация_тегов" / "validated_tags.json"
DEFAULT_CHAPTER = DIR.parent / "1_анализ_главы" / "вход_главы.json"
DEFAULT_OUTPUT = DIR / "merged_with_tags.json"

# Импорт логики мержа из основного скрипта
from merge_analysis_tags import load_json, merge_analysis_and_tags


def main() -> int:
    """Загружает анализ и теги по путям (по умолчанию — из соседних этапов), мержит, пишет выход."""
    parser = argparse.ArgumentParser(
        description="Мерж анализа (2b) и валидированных тегов (4) в один JSON (шаг 5). Пути по умолчанию — из этапов 1 и 4.",
    )
    parser.add_argument(
        "--merge",
        type=Path,
        default=DEFAULT_ANALYSIS,
        help=f"Путь к merge.json с анализом (по умолчанию: {DEFAULT_ANALYSIS})",
    )
    parser.add_argument(
        "--tags",
        type=Path,
        default=DEFAULT_TAGS,
        help=f"Путь к validated_tags.json (по умолчанию: {DEFAULT_TAGS})",
    )
    parser.add_argument(
        "--input-chapter",
        type=Path,
        default=DEFAULT_CHAPTER,
        help=f"Путь к вход_главы.json для метаданных главы/книги (по умолчанию: {DEFAULT_CHAPTER})",
    )
    parser.add_argument(
        "-o",
        "--output",
        type=Path,
        default=DEFAULT_OUTPUT,
        help=f"Путь к выходному JSON (по умолчанию: {DEFAULT_OUTPUT})",
    )
    parser.add_argument(
        "--no-chapter",
        action="store_true",
        help="Не подставлять метаданные главы из --input-chapter.",
    )
    args = parser.parse_args()

    if not args.merge.is_file():
        print(f"Файл не найден: {args.merge}", file=sys.stderr)
        return 1
    if not args.tags.is_file():
        print(f"Файл не найден: {args.tags}", file=sys.stderr)
        return 1

    print("Загрузка merge.json и validated_tags.json...")
    try:
        analysis = load_json(args.merge)
        tags_doc = load_json(args.tags)
    except json.JSONDecodeError as e:
        print(f"Ошибка разбора JSON: {e}", file=sys.stderr)
        return 1

    input_chapter = None
    if not args.no_chapter and args.input_chapter.is_file():
        try:
            input_chapter = load_json(args.input_chapter)
        except json.JSONDecodeError as e:
            print(f"Ошибка разбора input-chapter JSON: {e}", file=sys.stderr)
            return 1
    elif not args.no_chapter and not args.input_chapter.is_file():
        print(f"Файл не найден (метаданные главы не добавлены): {args.input_chapter}", file=sys.stderr)

    merged = merge_analysis_and_tags(analysis, tags_doc, input_chapter)
    args.output.parent.mkdir(parents=True, exist_ok=True)
    with open(args.output, "w", encoding="utf-8") as f:
        json.dump(merged, f, ensure_ascii=False, indent=2)
    print(f"Записано: {args.output}")
    return 0


if __name__ == "__main__":
    sys.exit(main())
