"""text_splitting_demo.py — CharacterTextSplitter and RecursiveCharacterTextSplitter"""

from pathlib import Path

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter, RecursiveCharacterTextSplitter

SAMPLES = Path(__file__).parent / "text_splitting_samples"
CHUNK_SIZE = 150
CHUNK_OVERLAP = 30


def print_chunks(label: str, chunks: list) -> None:
    print(f"\n=== {label} ({len(chunks)} chunks) ===")
    for i, chunk in enumerate(chunks):
        text = chunk.page_content.replace("\n", " ").strip()
        print(f"--- chunk {i} ({len(text)} chars) ---")
        print(text)
        print()


def main() -> None:
    notes_path = SAMPLES / "html_notes.txt"
    if not notes_path.exists():
        raise SystemExit(
            f"Missing file: {notes_path}\n"
            "Download text_splitting_demo.zip from the lesson page and unzip."
        )

    docs = TextLoader(str(notes_path), encoding="utf-8").load()
    print(f"Loaded 1 document — {len(docs[0].page_content)} characters total")

    char_splitter = CharacterTextSplitter(
        chunk_size=CHUNK_SIZE,
        chunk_overlap=CHUNK_OVERLAP,
        separator="",
    )
    char_chunks = char_splitter.split_documents(docs)
    print_chunks("CharacterTextSplitter", char_chunks)

    rec_splitter = RecursiveCharacterTextSplitter(
        chunk_size=CHUNK_SIZE,
        chunk_overlap=CHUNK_OVERLAP,
    )
    rec_chunks = rec_splitter.split_documents(docs)
    print_chunks("RecursiveCharacterTextSplitter", rec_chunks)


if __name__ == "__main__":
    main()