#!/usr/bin/env python3
"""
fix-o0o.py — Sửa separator "---o0o--" bị dính với text

Công dụng:
  Khi text được trích xuất từ PDF, separator "---o0o--" thường bị dính
  với nội dung ngay phía sau (vd: "---o0o--Nguồn").
  Script này tách chúng ra và thêm heading markdown cho phần text.

Nguyên tắc:
  - "---o0o--TextGắnLiền" → thành "---o0o--" + blank + "## TextGắnLiền" + blank
  - "---o0o---" (3 dash sau) → chỉ emit separator, không heading
  - Giữ nguyên separator đã đúng

Ví dụ:
  "---o0o--Nguồn" → blank + "---o0o--" + blank + "## Nguồn" + blank
  "---o0o---"    → blank + "---o0o--" + blank + blank

Cách dùng:
  python3 fix-o0o.py input.md [output.md]
  - Nếu không có output, ghi đè tại chỗ
"""

import re
import sys
from pathlib import Path


def fix_o0o(text: str) -> str:
    """
    Tách text dính sau separator ---o0o-- thành heading markdown.
    """
    lines = text.splitlines()
    result = []

    # Pattern 1: ---o0o--<text> (dính text)
    O0O_TEXT = re.compile(r'^---o0o--(.+)$')
    # Pattern 2: ---o0o--- (trailing dash, không dính text)
    O0O_DASH = re.compile(r'^---o0o---$')

    def ensure_blank_before():
        """Thêm dòng trống trước nếu chưa có."""
        if result and result[-1] != '':
            result.append('')

    def ensure_blank_after():
        """Thêm dòng trống sau nếu chưa có."""
        if result and result[-1] != '':
            result.append('')

    for line in lines:
        stripped = line.strip()
        m_text = O0O_TEXT.match(stripped)
        m_dash = O0O_DASH.match(stripped)

        if m_dash:
            # ---o0o--- → emit separator thường, không heading
            ensure_blank_before()
            result.append('---o0o--')
            ensure_blank_after()
            result.append('')
            continue

        if m_text:
            # ---o0o--Text → tách heading
            suffix = m_text.group(1).strip()
            ensure_blank_before()
            result.append('---o0o--')
            result.append('')
            result.append(f'## {suffix}')
            ensure_blank_after()
            continue

        # Dòng bình thường
        result.append(line)

    # Trim trailing blank lines
    while result and result[-1] == '':
        result.pop()

    return '\n'.join(result)


def main():
    if len(sys.argv) < 2:
        print("Usage: python3 fix-o0o.py input.md [output.md]", file=sys.stderr)
        sys.exit(1)

    input_path = Path(sys.argv[1])
    if not input_path.exists():
        print(f"Error: File not found: {input_path}", file=sys.stderr)
        sys.exit(1)

    output_path = Path(sys.argv[2]) if len(sys.argv) > 2 else input_path

    raw = input_path.read_text(encoding='utf-8')
    result = fix_o0o(raw)
    output_path.write_text(result, encoding='utf-8')

    original_lines = len(raw.splitlines())
    result_lines = len(result.splitlines()) if result else 0
    print(f"✅ Xong! {input_path.name}")
    print(f"   {original_lines} dòng → {result_lines} dòng")
    print(f"   → {output_path}")


if __name__ == '__main__':
    main()
