#!/usr/bin/env python3
"""
Script hậu xử lý cho văn bản Myanmar OCR từ PDF "An Duc Tam Bao".
Sửa các lỗi chính tả cổ và viết tắt mà AI hay tự ý thêm vào.

Dựa trên kinh nghiệm trích xuất từ trang 1-105 (2026-04-15)
"""

import sys
import re

def fix_text(text):
    """
    Sửa các lỗi OCR Myanmar phổ biến.
    Lưu ý: Không thay thế mù quáng - chỉ sửa các lỗi đã được xác nhận hệ thống.
    """
    
    # =====================================================================
    # 1. Lỗi viết tắt cổ (AI tự ý viết tắt - vi phạm literal transcription)
    # =====================================================================
    
    # Viết tắt "၎" thành "လည်းကောင်း" (lỗi phổ biến ~10 lần trong trang 91-95)
    text = text.replace("၎", "လည်းကောင်း")
    
    # Viết tắt số: "၃" thành "သုံး" (khi AI tự ý đổi chữ thành số)
    # Lưu ý: Chỉ áp dụng trong ngữ cảnh cụ thể, không làm blind replace
    # text = text.replace("၃", "သုံး")  # Tạm thời không áp dụng vì có thể là số thật
    
    # =====================================================================
    # 2. Lỗi nhầm ký tự phổ biến (hệ thống)
    # =====================================================================
    
    # Nhầm ဖ (Pha) thành ဘ (Bha) - xảy ra ~30 lần trong trang 81-90, ~15 lần trong 101-105
    # Chỉ sửa trong các từ cụ thể để tránh sửa nhầm từ đúng
    text = text.replace("ဘွယ်", "ဖွယ်")  # "ရဖွယ်", "ဖြစ်ဖွယ်", "ဘွယ်ရှိ"
    text = text.replace("ဘို့ရာ", "ဖို့ရာ")  # "ဖို့ရာ" = để cho
    text = text.replace("ဘို့အတွက်", "ဖို့အတွက်")
    text = text.replace("တောင်းဘူး", "တောင်းဖူး")  # "đã từng cầu xin"
    
    # Nhầm ျ thành ြ (xảy ra ~11 lần trong trang 81-90)
    # Khó sửa tự động vì cần ngữ cảnh - để manual
    
    # Nh nhầm ပ (Pa) thành န (Na) - xảy ra ~42 lần trong trang 81-90
    # Khó sửa tự động vì cần ngữ cảnh
    
    # Nhầm သြ thành ဩ (AI tự ý đổi)
    text = text.replace("သြကာသ", "ဩကာသ")
    
    # =====================================================================
    # 3. Lỗi dấu phụ
    # =====================================================================
    
    # Nhầm dấu Visarga (း) thành dấu Virama (Asat) (်) - 68 lần trong trang 81-90
    # Khó sửa tự động vì cần ngữ cảnh
    
    # Nhầm nguyên âm ေ thành ာ và ngược lại
    # Khó sửa tự động vì cần ngữ cảnh
    
    # =====================================================================
    # 4. Lỗi từ/cụm từ cụ thể (phát hiện từ trang 101-105)
    # =====================================================================
    
    # "လည်းလျောင်း" → "လဲလျောင်း" (sai dấu ~8 lần)
    text = text.replace("လည်းလျောင်း", "လဲလျောင်း")
    
    # "ရွှတ်ဆို" → "ရွတ်ဆို" (thêm dấu ှ không cần thiết ~5 lần)
    text = text.replace("ရွှတ်ဆို", "ရွတ်ဆို")
    
    # "တွေမြင်" → "တွေ့မြင်" (thiếu dấu ့ ~3 lần)
    text = text.replace("တွေမြင်", "တွေ့မြင်")
    
    # "သဌေး" → "သူဋ္ဌေး" (thiếu ူ và ဋ ~2 lần)
    text = text.replace("သဌေး", "သူဋ္ဌေး")
    
    # "အဓိပ္ပါယ်" → "အဓိပ္ပာယ်" (thiếu dấu ် ~3 lần)
    text = text.replace("အဓိပ္ပါယ်", "အဓိပ္ပာယ်")
    
    # "ရှေ့" → "ရှေး" trong ngữ cảnh "ngày xưa" (~2 lần)
    text = text.replace("ရှေ့ဆရာ", "ရှေးဆရာ")
    text = text.replace("ရှေ့စနစ်", "ရှေးစနစ်")
    text = text.replace("ရှေ့ထုံး", "ရှေးထုံး")
    text = text.replace("ရှေ့စဉ်လာ", "ရှေးစဉ်လာ")
    
    # "ပုညကြိယ" → "ပုညကိရိယ" (lỗi nghiêm trọng - thiếu က, thêm ြ)
    text = text.replace("ပုညကြိယ", "ပုညကိရိယ")
    text = text.replace("ပုညကြိယဝတ္ထု", "ပုညကိရိယဝတ္ထု")
    
    # "တကြိမ်" → "တစ်ကြိမ်" (khi AI tự ý bỏ စ် ~10 lần)
    # Chỉ sửa khi đứng độc lập, không sửa trong từ ghép
    text = re.sub(r'\bတကြိမ်\b', 'တစ်ကြိမ်', text)
    
    # =====================================================================
    # 5. Lỗi khác (phát hiện từ các trang trước)
    # =====================================================================
    
    # "သ္မီး" → "သမီး" (lỗi dấu ် thừa)
    text = text.replace("သ္မီး", "သမီး")
    
    # "ဥုး" → "ဦး" (danh xưng)
    text = text.replace("ဥုး", "ဦး")
    
    # "ဘခင်" → "ဖခင်" (cha)
    text = text.replace("ဘခင်", "ဖခင်")
    
    # "မှုံ" → "မုန့်" (bánh)
    text = text.replace("မှုံ", "မုန့်")
    
    # "တဆဲ့ငါး" → "တစ်ဆယ့်ငါး" (số 15)
    text = text.replace("တဆဲ့ငါး", "တစ်ဆယ့်ငါး")
    
    # "ဘူရာ" → "ဖို့ရာ" 
    text = text.replace("ဘူရာ", "ဖို့ရာ")
    
    # "သဘည်း" → "သတည်း"
    text = text.replace("သဘည်း", "သတည်း")
    
    # "ရပ် - ပြစ်" → "ရပ်ပြစ်"
    text = text.replace("ရပ် - ပြစ်", "ရပ်ပြစ်")
    text = text.replace("ရပ်-ပြစ်", "ရပ်ပြစ်")
    
    # =====================================================================
    # 6. Làm sạch khoảng trắng không cần thiết
    # =====================================================================
    
    # Xóa khoảng trắng trước dấu câu Myanmar
    text = re.sub(r'[ \t]+([၊။])', r'\1', text)
    
    # Chuẩn hóa khoảng trắng giữa các từ (giữ 1 khoảng trắng, không gộp dòng)
    text = re.sub(r'[ \t]+', ' ', text)
    
    return text


def main():
    if len(sys.argv) < 2:
        print("Usage: python3 fix_myanmar_ocr.py <file.md>")
        print("Example: python3 fix_myanmar_ocr.py tam_bao_101_105_qwen.md")
        sys.exit(1)
    
    filepath = sys.argv[1]
    
    try:
        with open(filepath, 'r', encoding='utf-8') as f:
            content = f.read()
        
        fixed_content = fix_text(content)
        
        with open(filepath, 'w', encoding='utf-8') as f:
            f.write(fixed_content)
        
        print(f"✅ Đã xử lý xong file: {filepath}")
        print("Các lỗi đã sửa:")
        print("  - Viết tắt cổ (၎ → လည်းကောင်း)")
        print("  - Nhầm ဖ/ဘ (ဘွယ်→ဖွယ်, ဘို့ရာ→ဖို့ရာ, တောင်းဘူး→တောင်းဖူး)")
        print("  - Lỗi dấu (လည်းလျောင်း→လဲလျောင်း, ရွှတ်ဆို→ရွတ်ဆို)")
        print("  - Thiếu ký tự (တွေမြင်→တွေ့မြင်, သဌေး→သူဋ္ဌေး)")
        print("  - Ngữ cảnh (ရှေ့→ရှေး trong 'ရှေးဆရာ', 'ရှေးစနစ်')")
        print("  - Từ cụ thể (ပုညကြိယ→ပုညကိရိယ, အဓိပ္ပါယ်→အဓိပ္ပာယ်)")
        
    except FileNotFoundError:
        print(f"❌ Không tìm thấy file: {filepath}")
        sys.exit(1)
    except Exception as e:
        print(f"❌ Lỗi: {e}")
        sys.exit(1)


if __name__ == "__main__":
    main()
