import re
import hashlib
import datetime
import os

# Target Files
TARGET_FILE = "workorder-postprocess-sample.html"
DOC_FILE = "WORKORDER_POST_PROCESS_LOG.md"

def calculate_file_hash(filepath):
    if not os.path.exists(filepath):
        return "File Not Found"
    with open(filepath, "rb") as f:
        return hashlib.sha256(f.read()).hexdigest()[:8]

def extract_logic(content, pattern, name):
    match = re.search(pattern, content, re.MULTILINE | re.DOTALL)
    if match:
        code_snippet = match.group(0).strip()
        if len(code_snippet) > 500:
            code_snippet = code_snippet[:500] + "\n... (truncated)"
        return f"### {name}\n```javascript\n{code_snippet}\n```\n"
    return f"### {name}\n*Not Found in current version*\n"

def main():
    print(f"Analyzing {TARGET_FILE} for Post-Process logic...")
    
    if not os.path.exists(TARGET_FILE):
        print(f"Error: {TARGET_FILE} not found.")
        return

    with open(TARGET_FILE, "r", encoding="utf-8") as f:
        content = f.read()

    # Regex Patterns (Using hex codes for quotes to avoid python string escaping issues)
    # \x22 = "
    # \x27 = '
    
    regex_handler = r"handlePostProcessChange\s*=\s*f.useCallback.*?]\)"
    regex_component = r"u.jsx(PostProcessPanel[\s\S]{1,300})"
    regex_tab = r"S.id\s*=== \s*[\x22\x27]wo-post[\x22\x27][\s\S]{1,150}"

    file_hash = calculate_file_hash(TARGET_FILE)
    timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    # Generate Content
    update_entry = "\n## 自動更新紀錄 (Auto-Update Log)\n"
    update_entry += f"**Update Time:** {timestamp}\n"
    update_entry += f"**File Hash:** `{file_hash}`\n\n"
    update_entry += "### 邏輯狀態快照 (Logic Snapshot)\n\n"
    update_entry += "以下是自動提取的關鍵邏輯片段 (Post-Process Logic Snippets)：\n\n"
    
    update_entry += extract_logic(content, regex_handler, "1. Handler (handlePostProcessChange)")
    update_entry += extract_logic(content, regex_component, "2. Component (PostProcessPanel)")
    update_entry += extract_logic(content, regex_tab, "3. Tab Logic (wo-post)")
    update_entry += "\n---\n"

    # Write to Markdown file
    mode = "a" if os.path.exists(DOC_FILE) else "w"
    with open(DOC_FILE, mode, encoding="utf-8") as f:
        if mode == "w":
            f.write("# WORKORDER POST-PROCESS LOG\n\nManaged by `update_postprocess_doc.py`.\n")
        f.write(update_entry)

    print(f"Successfully updated {DOC_FILE}")

if __name__ == "__main__":
    main()