#!/usr/bin/env python3
"""
Định dạng lại markdown file Sadi-206-210-qwen.md
- Tách trang rõ ràng
- Thêm khoảng trống giữa các đoạn
- Sau đó hiệu đính với Qwen 3.5
"""

import sys
import os
import re
import requests

# Setup paths
workspace = "/home/tuan-nguyen/.openclaw/workspace"
input_path = f"{workspace}/Chuan Muc Sadi/Sadi-206-210-qwen.md"
formatted_path = f"{workspace}/Chuan Muc Sadi/Sadi-206-210-formatted.md"
output_path = f"{workspace}/Chuan Muc Sadi/Sadi-206-210-edited.md"

# API Key
OPENROUTER_API_KEY = "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"

def read_file(path):
    with open(path, 'r', encoding='utf-8') as f:
        return f.read()

def split_into_pages(text):
    """Tách văn bản thành từng trang"""
    pattern = r'--- Trang (\d+) ---'
    matches = list(re.finditer(pattern, text))
    
    pages = []
    for i, match in enumerate(matches):
        page_num = match.group(1)
        start = match.end()
        end = matches[i+1].start() if i+1 < len(matches) else len(text)
        page_text = text[start:end].strip()
        pages.append((page_num, page_text))
    
    return pages

def format_page(page_text):
    """Định dạng một trang: tách đoạn, thêm khoảng trống"""
    # Tách dựa trên dấu câu Myanmar (။) và khoảng trắng dài
    # Mỗi câu hoàn chỉnh (có ္) sẽ là một đoạn
    
    # Thay thế các dấu ngắt câu thành newline
    formatted = re.sub(r'။\s+', '။\n\n', page_text)
    formatted = re.sub(r'\]\s+', ']\n\n', formatted)
    formatted = re.sub(r'\[\s+', '\n\n[', formatted)
    
    # Tách các dòng có số trang header
    formatted = re.sub(r'(\d{3})\s+', r'\1\n\n', formatted)
    
    # Thêm khoảng trống sau các marker đặc biệt
    formatted = re.sub(r'(\d{2}-\d{2}-\d{2}-\d{2})', r'\n\n\1\n\n', formatted)
    
    # Cleanup: không quá 2 newline liên tiếp
    formatted = re.sub(r'\n{3,}', '\n\n', formatted)
    
    return formatted.strip()

def edit_with_qwen(text, page_num):
    """Hiệu đính với Qwen 3.5"""
    
    headers = {
        'Authorization': f'Bearer {OPENROUTER_API_KEY}',
        'Content-Type': 'application/json',
        'HTTP-Referer': 'https://openclaw.ai',
        'X-Title': 'OpenClaw OCR Editor'
    }
    
    prompt = f"""Bạn là chuyên gia hiệu đính văn bản Phật pháp Myanmar.

Nhiệm vụ: Hiệu đính văn bản OCR trang {page_num} sau đây.

Sửa các lỗi thường gặp:
- Số ၈ bị nhận diện thành ဂ → sửa thành ၈
- လည်းကောင်း → လည်း (rút gọn)
- တောလည်းကောင်းင်း → တောင့်
- မှူး → မှဲ့
- ဗောဓိသျား → ဗောဓိသတ်
- ဂံလာန → ဂိလာန
- သင်္ခေသာ → သင်္ဃာ
- ပဋိသာ၀ီ → ပဋိသံဝီ
- ဥုံသ → ဥဏ္ဌ
- မဟက် → မီး
- ခြင် → ခြင်္
- မေ → မေဃ
- အေနအကံ → အေးအကံ
- မိးပကံ → မီးပကံ
- နေဝ → နေဝ (giữ nguyên)
- ပဋိသန္ဓိမ် → ပဋိသန္ဓိံ (đúng ngữ pháp Pali)

Yêu cầu:
- Giữ nguyên thuật ngữ Pali
- Giữ nguyên cấu trúc đoạn
- Chỉ sửa lỗi chính tả Myanmar
- Xuất ra văn bản đã hiệu đính đầy đủ, không thêm giải thích

Văn bản cần hiệu đính:
{text}

Văn bản đã hiệu đính:"""

    payload = {
        'model': 'qwen/qwen3.5-397b-a17b',
        'messages': [
            {
                'role': 'user',
                'content': prompt
            }
        ],
        'max_tokens': 8000
    }
    
    response = requests.post(
        'https://openrouter.ai/api/v1/chat/completions',
        headers=headers,
        json=payload,
        timeout=120
    )
    
    if response.status_code == 200:
        data = response.json()
        edited_text = data['choices'][0]['message']['content']
        if edited_text:
            return edited_text.strip()
        else:
            print(f"  Cảnh báo: Trang {page_num} trả về empty content")
            return text  # Trả về nguyên bản nếu không có kết quả
    else:
        print(f"  Lỗi API trang {page_num}: {response.status_code}")
        print(f"  Response: {response.text[:200]}")
        return f"[Lỗi hiệu đính trang {page_num}]"

def main():
    print(f"🔍 Bắt đầu xử lý Sadi-206-210")
    
    if not os.path.exists(input_path):
        print(f"❌ File không tồn tại: {input_path}")
        sys.exit(1)
    
    # Đọc file input
    print(f"📄 Đọc file input...")
    text = read_file(input_path)
    print(f"  Đã đọc {len(text)} ký tự")
    
    # Tách thành từng trang
    print(f"✂️ Tách thành từng trang...")
    pages = split_into_pages(text)
    print(f"  Tìm thấy {len(pages)} trang")
    
    if not pages:
        print("❌ Không tìm thấy trang nào!")
        sys.exit(1)
    
    # Định dạng từng trang
    print(f"📝 Định dạng markdown...")
    formatted_pages = []
    
    for page_num, page_text in pages:
        print(f"  Định dạng trang {page_num}...")
        formatted = format_page(page_text)
        formatted_pages.append((page_num, formatted))
    
    # Lưu file đã định dạng
    formatted_text = '\n\n'.join([f"--- Trang {pn} ---\n{pt}" for pn, pt in formatted_pages])
    with open(formatted_path, 'w', encoding='utf-8') as f:
        f.write(formatted_text)
    
    print(f"✅ Đã lưu file định dạng: {formatted_path}")
    print(f"  Số ký tự: {len(formatted_text)}")
    
    # Hiệu đính từng trang
    print(f"\n🤖 Hiệu đính với Qwen 3.5...")
    edited_pages = []
    
    for page_num, formatted_text in formatted_pages:
        print(f"  Hiệu đính trang {page_num}...")
        edited_text = edit_with_qwen(formatted_text, page_num)
        edited_pages.append(f"--- Trang {page_num} ---\n{edited_text}")
        print(f"    ✅ Xong trang {page_num}")
    
    # Ghi kết quả cuối cùng
    final_text = '\n\n'.join(edited_pages)
    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(final_text)
    
    print(f"\n✅ HOÀN THÀNH! Đã lưu vào: {output_path}")
    print(f"Số ký tự: {len(final_text)}")

if __name__ == "__main__":
    main()
