#!/usr/bin/env python3
"""
Example script for batch converting multiple PDFs.
"""

import sys
from pathlib import Path

# Add parent directory to path for imports
sys.path.insert(0, str(Path(__file__).parent.parent))

from loguru import logger

from src.docling_converter import PDFConverter
from src.docling_converter.utils import setup_logging, suppress_library_logging


def batch_convert(input_dir: Path, output_base_dir: Path, workers: int = 2):
    """
    Convert all PDFs in a directory.

    Args:
        input_dir: Directory containing PDF files
        output_base_dir: Base directory for outputs
        workers: Number of parallel workers
    """
    # Setup logging
    setup_logging(verbose=False)
    suppress_library_logging()

    # Find all PDF files
    pdf_files = list(input_dir.glob("*.pdf"))
    logger.info(f"Found {len(pdf_files)} PDF files to convert")

    if not pdf_files:
        logger.warning("No PDF files found")
        return

    # Process each PDF
    total_success = 0
    total_failed = 0

    for pdf_file in pdf_files:
        logger.info(f"\nProcessing: {pdf_file.name}")

        # Create output directory for this PDF
        output_dir = output_base_dir / pdf_file.stem
        output_dir.mkdir(parents=True, exist_ok=True)

        # Initialize converter
        converter = PDFConverter(output_dir=str(output_dir), max_workers=workers)

        # Convert
        results = converter.convert(pdf_file)

        total_success += results["success"]
        total_failed += results["failed"]

        logger.info(f"Completed {pdf_file.name}: {results['success']} pages converted")

    # Final summary
    logger.success("\nBatch conversion complete!")
    logger.info(f"Total pages converted: {total_success}")
    if total_failed > 0:
        logger.warning(f"Total pages failed: {total_failed}")


if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser(description="Batch convert PDFs to Markdown")
    parser.add_argument("input_dir", help="Directory containing PDF files")
    parser.add_argument(
        "--output-dir", "-o", default="batch_output", help="Base output directory (default: batch_output)"
    )
    parser.add_argument("--workers", "-w", type=int, default=2, help="Number of workers per PDF (default: 2)")

    args = parser.parse_args()

    input_dir = Path(args.input_dir)
    if not input_dir.exists() or not input_dir.is_dir():
        logger.error(f"Input directory not found: {input_dir}")
        sys.exit(1)

    output_dir = Path(args.output_dir)

    batch_convert(input_dir, output_dir, args.workers)
