import json
import logging
from typing import List

logger = logging.getLogger(__name__)

def generate_optimizer_prompt(feedbacks: list, current_rules: str) -> str:
    """
    Hàm này tạo Prompt Module chuẩn để nhồi cho con Gemini.
    Định nghĩa vai trò là Chuyên gia Fashion QC Agent.
    """
    feedback_text = ""
    for idx, fb in enumerate(feedbacks):
        feedback_text += f"{idx+1}. User hỏi: '{fb['user_query']}' -> Bot trả lời: '{fb['bot_suggestion']}' -> User chửi: '{fb['feedback_note']}'\n"
        
    prompt = f"""
    You are an expert AI Fashion Quality Assurance (QA) Agent. 
    Your task is to fix logical flaws in the current 'fashion_rules.json' based on user bad-feedback.
    
    =========== EXPLICIT INSTRUCTIONS ===========
    1. Check what the users are angry about in the feedback.
    2. Review the CURRENT RULES JSON.
    3. Modify specific weight arrays or negative pairs to satisfy the user feedback. (For example, explicitly banning 'sweatshirt' for 'summer', or 'shorts' for 'formal_event').
    4. Provide the FINAL COMPLETE JSON EXACTLY in the output format, properly structured.

    =========== BAD FEEDBACK LOGS ===========
    {feedback_text}
    
    =========== CURRENT RULES (JSON) ===========
    {current_rules}
    """
    return prompt

def run_optimization_logic(feedbacks: list, current_rules_str: str) -> str:
    """
    Lõi chạy suy luận trực tiếp. Thực tế sẽ invoke call sang LLM.
    Trong bản API PoC này, trả về mock JSON mô phỏng Gemini đã edit lại file.
    """
    logger.info("Chạy Agent Learning Loop phân tích Rules vs Feedbacks...")
    
    # TODO: Tích hợp langchain_google_genai hoặc API Gemini thật tại đây...
    # prompt = generate_optimizer_prompt(feedbacks, current_rules_str)
    # output = gemini_llm.invoke(prompt)
    
    # ----------------------------------------
    # MOCK DATA: Giả sử LLM xuất ra JSON đã sửa lỗi "sweatshirt" mua he
    # Bản gốc fashion_rules.json sẽ đc lấy nội dung + đắp thêm rule cấm kỵ mới
    try:
        old_data = json.loads(current_rules_str)
    except:
        old_data = {}
        
    # Agent tự động bổ sung Rule âm điểm (Trừ 99 điểm) cho ca lỗi
    if "negative_matches" not in old_data:
        old_data["negative_matches"] = []
        
    old_data["negative_matches"].extend([
        {"season_vi": "mùa hè", "banned_category": "áo nỉ", "reason": "Feedback tồi: nóng"},
        {"season_vi": "mùa hè", "banned_category": "áo len cardigan", "reason": "Feedback tồi: nóng"},
        {"occasion": "công sở", "banned_category": "quần ngố", "reason": "Feedback tồi: không lịch sự"}
    ])
    
    # Trả ra text JSON chuẩn đã đc Agent "chỉnh não"
    return json.dumps(old_data, ensure_ascii=False, indent=4)
