import os

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Pt


def create_doc():
    doc = Document()

    # Title
    title = doc.add_heading('Canifa AI Stylist - Lead Search Tool Architecture', 0)
    title.alignment = WD_ALIGN_PARAGRAPH.CENTER

    doc.add_paragraph('Bản vẽ chi tiết luồng hoạt động & Kiến trúc tối ưu Token (Cập nhật T4/2026)', style='Subtitle')

    # Section 1
    doc.add_heading('1. Tổng quan (Overview)', level=1)
    doc.add_paragraph('Lead Search Tool là trung tâm truy xuất dữ liệu sản phẩm của Canifa AI Stylist. Sau đợt tái cấu trúc, hệ thống đã loại bỏ hoàn toàn OpenAI Embedding, thay thế bằng cơ chế Cascading Search 7 tầng (NGRAMBF + BITMAP Tags), mang lại tốc độ truy vấn < 300ms. Đồng thời, cấu trúc dữ liệu trả về được tối ưu hóa để giảm thiểu Token tiêu thụ cho LLM.')

    # Section 2
    doc.add_heading('2. Kiến trúc Tối ưu Token (Token-Saving Architecture)', level=1)
    p = doc.add_paragraph()
    p.add_run('Thay vì trả về 15-20 sản phẩm chi tiết (gây tràn Context Window), hệ thống hiện tại sử dụng chiến lược: ').bold = True
    p.add_run('"Lấy ít sản phẩm chính, móc nhiều sản phẩm gợi ý".')
    
    doc.add_paragraph('• Main Products (Top 3): Trả về tối đa 3 sản phẩm match nhất với đầy đủ thông tin chi tiết (Size, Giá, Mô tả ngắn <200 ký tự, Tồn kho thực tế, Lý do phối đồ AI).', style='List Bullet')
    doc.add_paragraph('• Suggest Items (Phối cùng): Cho mỗi sản phẩm chính, lấy thêm tối đa 2 sản phẩm phối cùng (chỉ gồm SKU, Tên, Giá).', style='List Bullet')
    doc.add_paragraph('• Similar Items (Tương tự): Cho mỗi sản phẩm chính, lấy thêm tối đa 3 sản phẩm thay thế (chỉ gồm SKU, Tên, Giá).', style='List Bullet')
    doc.add_paragraph('Kết quả: LLM vẫn có 3 lựa chọn chính và 15 lựa chọn phụ để tư vấn, nhưng số lượng Token giảm xuống 75%.')

    # Section 3
    doc.add_heading('3. Luồng dữ liệu (Data Flow)', level=1)
    
    flow_steps = [
        ("Bước 1: Phân tích Ý định (Input parsing)", "Nhận các tham số từ Agent: keywords, tags, color, size, price_min, price_max."),
        ("Bước 2: Cascading Search (7 Tiers)", "Truy xuất StarRocks qua 7 tầng rớt mạng. Tầng 1 (Keywords + Hard Filters), Tầng 2 (Tags + Filters), Tầng 5-6 (Nới giá 1.5x - 2.0x)."),
        ("Bước 3: Lọc Tồn Kho (Stock API)", "Gửi các mã sản phẩm sang Canifa Stock API qua httpx. Chỉ giữ lại những mã đang CÒN HÀNG, kèm theo danh sách chi tiết các size còn trống."),
        ("Bước 4: Bổ sung Styling (SQLite)", "Đọc file SQLite local để lấy `ai_description` và `ai_matches` (lý do phối đồ), cung cấp 'bộ não' thời trang cho LLM chốt sale."),
        ("Bước 5: Định dạng Đầu ra (Output Formatter)", "Gom nhóm dữ liệu, cắt ngắn mô tả, fetch suggest/similar items và trả về JSON nhẹ nhất cho AI.")
    ]
    
    for step, desc in flow_steps:
        p = doc.add_paragraph(style='List Number')
        p.add_run(step + ": ").bold = True
        p.add_run(desc)

    # Section 4
    doc.add_heading('4. Đầu ra của hệ thống (JSON Format)', level=1)
    doc.add_paragraph('Dưới đây là cấu trúc minh hoạ cho 1 sản phẩm chính sau khi được format gọn nhẹ:')
    
    json_example = """{
  "sku": "8TP24S001-SB060",
  "name": "Áo polo nam phom regular",
  "price": 349000,
  "in_stock": true,
  "stock": [{"size": "M", "qty": 10}, {"size": "L", "qty": 14}],
  "ai_matches": {
    "phoi_voi": ["Quần khaki nam"],
    "ly_do": "Màu áo hợp quần khaki tạo vẻ thanh lịch..."
  },
  "suggest_items": [
    {"sku": "8QK24S002", "name": "Quần khaki nam", "price": 450000}
  ],
  "similar_items": [
    {"sku": "8TP24S003", "name": "Áo polo sọc", "price": 399000}
  ]
}"""
    code_p = doc.add_paragraph(json_example)
    code_p.style.font.name = 'Courier New'
    code_p.style.font.size = Pt(9)
    
    # Save document
    os.makedirs(r"D:\cnf\chatbot-canifa-feedback\backend\static\lead_flow", exist_ok=True)
    out_path = r"D:\cnf\chatbot-canifa-feedback\backend\static\lead_flow\lead_search_logic.docx"
    doc.save(out_path)
    print(f"Created docx at {out_path}")

if __name__ == "__main__":
    create_doc()
