import json
import uuid
from datetime import datetime
from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, current_app, send_file
from flask_login import login_required, current_user
from app.extensions import db, csrf
from app.models.report import Report
from app.models.services import PatentApplication, TrademarkApplication

ip_bp = Blueprint("ip", __name__, url_prefix="/ip")

FILING_TYPE_INFO = {
    "saip": {
        "name_ar": "الهيئة السعودية للملكية الفكرية (SAIP)",
        "name_en": "Saudi Authority for Intellectual Property",
        "icon": "🇸🇦",
        "description_ar": "تقديم طلب براءة اختراع للهيئة السعودية للملكية الفكرية. الحماية تسري في المملكة العربية السعودية لمدة 20 سنة.",
        "url": "https://eservices.saip.gov.sa",
    },
    "gcc": {
        "name_ar": "مكتب براءات اختراع مجلس التعاون الخليجي",
        "name_en": "GCC Patent Office",
        "icon": "🌍",
        "description_ar": "تقديم طلب براءة اختراع لمكتب مجلس التعاون. الحماية تسري في جميع دول المجلس الست.",
        "url": "https://www.gccpo.org",
    },
    "pct": {
        "name_ar": "معاهدة التعاون بشأن البراءات (PCT/WIPO)",
        "name_en": "Patent Cooperation Treaty (WIPO)",
        "icon": "🌐",
        "description_ar": "تقديم طلب دولي عبر المنظمة العالمية للملكية الفكرية. يتيح الحماية في أكثر من 150 دولة.",
        "url": "https://www.wipo.int/pct/en/",
    },
}

NICE_CLASSES = [
    {"num": 1, "ar": "مواد كيميائية", "en": "Chemicals"},
    {"num": 2, "ar": "دهانات وورنيش", "en": "Paints, varnishes"},
    {"num": 3, "ar": "مستحضرات تجميل", "en": "Cosmetics, cleaning"},
    {"num": 4, "ar": "زيوت ووقود", "en": "Industrial oils, fuels"},
    {"num": 5, "ar": "مستحضرات صيدلانية", "en": "Pharmaceuticals"},
    {"num": 6, "ar": "معادن عادية", "en": "Common metals"},
    {"num": 7, "ar": "آلات ومحركات", "en": "Machines, motors"},
    {"num": 8, "ar": "أدوات يدوية", "en": "Hand tools"},
    {"num": 9, "ar": "أجهزة علمية وإلكترونية", "en": "Scientific, electronic apparatus"},
    {"num": 10, "ar": "أجهزة طبية", "en": "Medical apparatus"},
    {"num": 11, "ar": "أجهزة إنارة وتدفئة", "en": "Lighting, heating"},
    {"num": 12, "ar": "مركبات", "en": "Vehicles"},
    {"num": 13, "ar": "أسلحة نارية", "en": "Firearms"},
    {"num": 14, "ar": "معادن ثمينة ومجوهرات", "en": "Precious metals, jewelry"},
    {"num": 15, "ar": "آلات موسيقية", "en": "Musical instruments"},
    {"num": 16, "ar": "ورق ومطبوعات", "en": "Paper, printed matter"},
    {"num": 17, "ar": "مطاط وبلاستيك", "en": "Rubber, plastics"},
    {"num": 18, "ar": "جلود وحقائب", "en": "Leather, bags"},
    {"num": 19, "ar": "مواد بناء", "en": "Building materials"},
    {"num": 20, "ar": "أثاث", "en": "Furniture"},
    {"num": 21, "ar": "أدوات منزلية", "en": "Household utensils"},
    {"num": 22, "ar": "حبال وشباك", "en": "Ropes, nets"},
    {"num": 23, "ar": "خيوط نسيجية", "en": "Yarns, threads"},
    {"num": 24, "ar": "أقمشة ومنسوجات", "en": "Textiles, fabrics"},
    {"num": 25, "ar": "ملابس وأحذية", "en": "Clothing, footwear"},
    {"num": 26, "ar": "أزرار ودبابيس", "en": "Buttons, pins"},
    {"num": 27, "ar": "سجاد وحصير", "en": "Carpets, mats"},
    {"num": 28, "ar": "ألعاب ورياضة", "en": "Games, sporting goods"},
    {"num": 29, "ar": "لحوم وأسماك ومنتجات ألبان", "en": "Meat, fish, dairy"},
    {"num": 30, "ar": "قهوة وشاي وحلويات", "en": "Coffee, tea, confectionery"},
    {"num": 31, "ar": "منتجات زراعية", "en": "Agricultural products"},
    {"num": 32, "ar": "مشروبات غير كحولية", "en": "Non-alcoholic beverages"},
    {"num": 33, "ar": "مشروبات كحولية", "en": "Alcoholic beverages"},
    {"num": 34, "ar": "تبغ", "en": "Tobacco"},
    {"num": 35, "ar": "إعلان وإدارة أعمال", "en": "Advertising, business management"},
    {"num": 36, "ar": "تأمين ومالية", "en": "Insurance, finance"},
    {"num": 37, "ar": "بناء وإصلاح", "en": "Building, repair"},
    {"num": 38, "ar": "اتصالات", "en": "Telecommunications"},
    {"num": 39, "ar": "نقل وتخزين", "en": "Transport, storage"},
    {"num": 40, "ar": "معالجة مواد", "en": "Treatment of materials"},
    {"num": 41, "ar": "تعليم وترفيه", "en": "Education, entertainment"},
    {"num": 42, "ar": "خدمات علمية وتقنية", "en": "Scientific, technological services"},
    {"num": 43, "ar": "مطاعم وفنادق", "en": "Restaurants, hotels"},
    {"num": 44, "ar": "خدمات طبية وزراعية", "en": "Medical, agricultural services"},
    {"num": 45, "ar": "خدمات قانونية وأمنية", "en": "Legal, security services"},
]


# ── Patent Applications List ─────────────────────────────────────────

@ip_bp.route("/")
@login_required
def index():
    patents = PatentApplication.query.filter_by(user_id=current_user.id)\
        .order_by(PatentApplication.created_at.desc()).all()
    trademarks = TrademarkApplication.query.filter_by(user_id=current_user.id)\
        .order_by(TrademarkApplication.created_at.desc()).all()
    return render_template("ip/index.html",
                           patents=patents, trademarks=trademarks,
                           filing_info=FILING_TYPE_INFO)


# ── New Patent Application ───────────────────────────────────────────

@ip_bp.route("/patent/new/<int:report_id>", methods=["GET", "POST"])
@login_required
def new_patent(report_id):
    report = Report.query.get_or_404(report_id)
    if report.user_id != current_user.id:
        return redirect(url_for("dashboard.index"))

    if request.method == "POST":
        filing_type = request.form.get("filing_type", "saip")
        if filing_type not in PatentApplication.FILING_TYPES:
            filing_type = "saip"
        app_entry = PatentApplication(
            user_id=current_user.id,
            report_id=report.id,
            filing_type=filing_type,
            title_ar=request.form.get("title_ar", report.project_name),
            title_en=request.form.get("title_en", ""),
            status="draft",
            share_token=uuid.uuid4().hex,
        )
        db.session.add(app_entry)
        db.session.commit()
        return redirect(url_for("ip.edit_patent", app_id=app_entry.id))

    return render_template("ip/new_patent.html", report=report, filing_info=FILING_TYPE_INFO)


# ── Edit Patent Application ──────────────────────────────────────────

@ip_bp.route("/patent/edit/<int:app_id>", methods=["GET", "POST"])
@login_required
def edit_patent(app_id):
    patent = PatentApplication.query.get_or_404(app_id)
    if patent.user_id != current_user.id:
        return redirect(url_for("ip.index"))

    if request.method == "POST":
        patent.title_ar = request.form.get("title_ar", patent.title_ar)
        patent.title_en = request.form.get("title_en", patent.title_en)
        patent.technical_field = request.form.get("technical_field", "")
        patent.ipc_code = request.form.get("ipc_code", "")
        patent.background_art = request.form.get("background_art", "")
        patent.invention_description = request.form.get("invention_description", "")
        patent.abstract_ar = request.form.get("abstract_ar", "")
        patent.abstract_en = request.form.get("abstract_en", "")
        patent.drawings_description = request.form.get("drawings_description", "")

        # Parse applicant JSON
        applicant = {
            "name_ar": request.form.get("applicant_name_ar", ""),
            "name_en": request.form.get("applicant_name_en", ""),
            "address": request.form.get("applicant_address", ""),
            "nationality": request.form.get("applicant_nationality", ""),
            "phone": request.form.get("applicant_phone", ""),
            "email": request.form.get("applicant_email", ""),
            "id_number": request.form.get("applicant_id_number", ""),
        }
        patent.applicant_json = applicant

        # Parse inventors
        inv_names = request.form.getlist("inventor_name[]")
        inv_nationalities = request.form.getlist("inventor_nationality[]")
        inv_addresses = request.form.getlist("inventor_address[]")
        inv_contributions = request.form.getlist("inventor_contribution[]")
        inventors = []
        for i in range(len(inv_names)):
            if inv_names[i].strip():
                inventors.append({
                    "name": inv_names[i].strip(),
                    "nationality": inv_nationalities[i].strip() if i < len(inv_nationalities) else "",
                    "address": inv_addresses[i].strip() if i < len(inv_addresses) else "",
                    "contribution": inv_contributions[i].strip() if i < len(inv_contributions) else "",
                })
        patent.inventors_json = inventors

        # Parse claims
        claim_types = request.form.getlist("claim_type[]")
        claim_texts = request.form.getlist("claim_text[]")
        claims = []
        for i in range(len(claim_texts)):
            if claim_texts[i].strip():
                claims.append({
                    "type": claim_types[i] if i < len(claim_types) else "independent",
                    "text": claim_texts[i].strip(),
                })
        patent.claims_json = claims

        # Parse priority claims
        pri_countries = request.form.getlist("priority_country[]")
        pri_dates = request.form.getlist("priority_date[]")
        pri_numbers = request.form.getlist("priority_number[]")
        priorities = []
        for i in range(len(pri_countries)):
            if pri_countries[i].strip():
                priorities.append({
                    "country": pri_countries[i].strip(),
                    "date": pri_dates[i].strip() if i < len(pri_dates) else "",
                    "number": pri_numbers[i].strip() if i < len(pri_numbers) else "",
                })
        patent.priority_claims_json = priorities

        patent.status = request.form.get("status", "draft")
        db.session.commit()
        flash("تم حفظ طلب البراءة بنجاح", "success")
        return redirect(url_for("ip.view_patent", app_id=patent.id))

    return render_template("ip/edit_patent.html", patent=patent, filing_info=FILING_TYPE_INFO)


# ── View Patent Application ──────────────────────────────────────────

@ip_bp.route("/patent/view/<int:app_id>")
@login_required
def view_patent(app_id):
    patent = PatentApplication.query.get_or_404(app_id)
    if patent.user_id != current_user.id:
        return redirect(url_for("ip.index"))
    return render_template("ip/view_patent.html", patent=patent, filing_info=FILING_TYPE_INFO)


# ── Share Patent (public link) ───────────────────────────────────────

@ip_bp.route("/patent/share/<token>")
def share_patent(token):
    patent = PatentApplication.query.filter_by(share_token=token).first_or_404()
    return render_template("ip/view_patent.html", patent=patent, filing_info=FILING_TYPE_INFO, shared=True)


# ── Export Patent as Word ────────────────────────────────────────────

@ip_bp.route("/patent/export/<int:app_id>")
@login_required
def export_patent(app_id):
    patent = PatentApplication.query.get_or_404(app_id)
    if patent.user_id != current_user.id:
        return redirect(url_for("ip.index"))

    try:
        from docx import Document as DocxDoc
        from docx.shared import Pt, Inches
        from docx.enum.text import WD_ALIGN_PARAGRAPH
        import io

        doc = DocxDoc()
        style = doc.styles['Normal']
        style.font.size = Pt(12)

        finfo = FILING_TYPE_INFO.get(patent.filing_type, {})
        doc.add_heading(f"طلب براءة اختراع - {finfo.get('name_ar', '')}", 0)

        doc.add_heading("بيانات مقدم الطلب", level=1)
        applicant = patent.applicant_json or {}
        table = doc.add_table(rows=7, cols=2)
        table.style = 'Table Grid'
        fields = [
            ("الاسم (عربي)", applicant.get("name_ar", "")),
            ("الاسم (إنجليزي)", applicant.get("name_en", "")),
            ("العنوان", applicant.get("address", "")),
            ("الجنسية", applicant.get("nationality", "")),
            ("الهاتف", applicant.get("phone", "")),
            ("البريد الإلكتروني", applicant.get("email", "")),
            ("رقم الهوية/السجل", applicant.get("id_number", "")),
        ]
        for i, (label, val) in enumerate(fields):
            table.rows[i].cells[0].text = label
            table.rows[i].cells[1].text = val or ""

        doc.add_heading("بيانات المخترع(ين)", level=1)
        for idx, inv in enumerate(patent.inventors_json or []):
            doc.add_paragraph(f"المخترع {idx+1}: {inv.get('name', '')} — الجنسية: {inv.get('nationality', '')} — المساهمة: {inv.get('contribution', '')}")

        doc.add_heading("عنوان الاختراع", level=1)
        doc.add_paragraph(f"بالعربية: {patent.title_ar or ''}")
        doc.add_paragraph(f"بالإنجليزية: {patent.title_en or ''}")

        doc.add_heading("المجال التقني", level=1)
        doc.add_paragraph(patent.technical_field or "")
        if patent.ipc_code:
            doc.add_paragraph(f"تصنيف IPC: {patent.ipc_code}")

        doc.add_heading("خلفية الاختراع", level=1)
        doc.add_paragraph(patent.background_art or "")

        doc.add_heading("وصف الاختراع التفصيلي", level=1)
        doc.add_paragraph(patent.invention_description or "")

        doc.add_heading("عناصر الحماية (المطالبات)", level=1)
        for idx, claim in enumerate(patent.claims_json or []):
            ctype = "مستقلة" if claim.get("type") == "independent" else "تابعة"
            doc.add_paragraph(f"{idx+1}. [{ctype}] {claim.get('text', '')}")

        doc.add_heading("ملخص الاختراع", level=1)
        doc.add_paragraph(f"بالعربية: {patent.abstract_ar or ''}")
        doc.add_paragraph(f"بالإنجليزية: {patent.abstract_en or ''}")

        if patent.drawings_description:
            doc.add_heading("وصف الرسومات", level=1)
            doc.add_paragraph(patent.drawings_description)

        if patent.priority_claims_json:
            doc.add_heading("بيانات الأولوية", level=1)
            for pri in patent.priority_claims_json:
                doc.add_paragraph(f"الدولة: {pri.get('country', '')} — التاريخ: {pri.get('date', '')} — الرقم: {pri.get('number', '')}")

        buf = io.BytesIO()
        doc.save(buf)
        buf.seek(0)
        fname = f"patent_{patent.filing_type}_{patent.id}.docx"
        return send_file(buf, as_attachment=True, download_name=fname,
                         mimetype="application/vnd.openxmlformats-officedocument.wordprocessingml.document")
    except ImportError:
        flash("مكتبة python-docx مطلوبة للتصدير", "error")
        return redirect(url_for("ip.view_patent", app_id=app_id))


# ── New Trademark Application ────────────────────────────────────────

@ip_bp.route("/trademark/new/<int:report_id>", methods=["GET", "POST"])
@login_required
def new_trademark(report_id):
    report = Report.query.get_or_404(report_id)
    if report.user_id != current_user.id:
        return redirect(url_for("dashboard.index"))

    if request.method == "POST":
        filing_type = request.form.get("filing_type", "saip")
        tm = TrademarkApplication(
            user_id=current_user.id,
            report_id=report.id,
            filing_type=filing_type,
            brand_name_ar=request.form.get("brand_name_ar", ""),
            brand_name_en=request.form.get("brand_name_en", ""),
            status="draft",
            share_token=uuid.uuid4().hex,
        )
        db.session.add(tm)
        db.session.commit()
        return redirect(url_for("ip.edit_trademark", app_id=tm.id))

    return render_template("ip/new_trademark.html", report=report, nice_classes=NICE_CLASSES)


# ── Edit Trademark ───────────────────────────────────────────────────

@ip_bp.route("/trademark/edit/<int:app_id>", methods=["GET", "POST"])
@login_required
def edit_trademark(app_id):
    tm = TrademarkApplication.query.get_or_404(app_id)
    if tm.user_id != current_user.id:
        return redirect(url_for("ip.index"))

    if request.method == "POST":
        tm.brand_name_ar = request.form.get("brand_name_ar", tm.brand_name_ar)
        tm.brand_name_en = request.form.get("brand_name_en", tm.brand_name_en)
        tm.goods_services_description = request.form.get("goods_services_description", "")
        tm.color_claim = request.form.get("color_claim", "")
        tm.filing_type = request.form.get("filing_type", tm.filing_type)

        applicant = {
            "name_ar": request.form.get("applicant_name_ar", ""),
            "name_en": request.form.get("applicant_name_en", ""),
            "address": request.form.get("applicant_address", ""),
            "nationality": request.form.get("applicant_nationality", ""),
            "phone": request.form.get("applicant_phone", ""),
            "email": request.form.get("applicant_email", ""),
        }
        tm.applicant_json = applicant

        classes = request.form.getlist("nice_classes[]")
        tm.nice_classes_json = [int(c) for c in classes if c.isdigit()]

        tm.status = request.form.get("status", "draft")
        db.session.commit()
        flash("تم حفظ طلب العلامة التجارية", "success")
        return redirect(url_for("ip.view_trademark", app_id=tm.id))

    return render_template("ip/edit_trademark.html", tm=tm, nice_classes=NICE_CLASSES)


# ── View Trademark ───────────────────────────────────────────────────

@ip_bp.route("/trademark/view/<int:app_id>")
@login_required
def view_trademark(app_id):
    tm = TrademarkApplication.query.get_or_404(app_id)
    if tm.user_id != current_user.id:
        return redirect(url_for("ip.index"))
    return render_template("ip/view_trademark.html", tm=tm, nice_classes=NICE_CLASSES)


# ── Share Trademark ──────────────────────────────────────────────────

@ip_bp.route("/trademark/share/<token>")
def share_trademark(token):
    tm = TrademarkApplication.query.filter_by(share_token=token).first_or_404()
    return render_template("ip/view_trademark.html", tm=tm, nice_classes=NICE_CLASSES, shared=True)


# ── Export Trademark as Word ─────────────────────────────────────────

@ip_bp.route("/trademark/export/<int:app_id>")
@login_required
def export_trademark(app_id):
    tm = TrademarkApplication.query.get_or_404(app_id)
    if tm.user_id != current_user.id:
        return redirect(url_for("ip.index"))
    try:
        from docx import Document as DocxDoc
        from docx.shared import Pt
        import io

        doc = DocxDoc()
        doc.add_heading("طلب تسجيل علامة تجارية", 0)

        doc.add_heading("بيانات مقدم الطلب", level=1)
        applicant = tm.applicant_json or {}
        for k, v in [("الاسم (عربي)", applicant.get("name_ar", "")),
                     ("الاسم (إنجليزي)", applicant.get("name_en", "")),
                     ("العنوان", applicant.get("address", "")),
                     ("الجنسية", applicant.get("nationality", ""))]:
            doc.add_paragraph(f"{k}: {v}")

        doc.add_heading("العلامة التجارية", level=1)
        doc.add_paragraph(f"بالعربية: {tm.brand_name_ar or ''}")
        doc.add_paragraph(f"بالإنجليزية: {tm.brand_name_en or ''}")

        doc.add_heading("تصنيف نيس", level=1)
        for c in (tm.nice_classes_json or []):
            nc = next((n for n in NICE_CLASSES if n["num"] == c), None)
            if nc:
                doc.add_paragraph(f"الفئة {nc['num']}: {nc['ar']} ({nc['en']})")

        doc.add_heading("وصف السلع/الخدمات", level=1)
        doc.add_paragraph(tm.goods_services_description or "")

        if tm.color_claim:
            doc.add_heading("ادعاء اللون", level=1)
            doc.add_paragraph(tm.color_claim)

        buf = io.BytesIO()
        doc.save(buf)
        buf.seek(0)
        return send_file(buf, as_attachment=True, download_name=f"trademark_{tm.id}.docx",
                         mimetype="application/vnd.openxmlformats-officedocument.wordprocessingml.document")
    except ImportError:
        flash("مكتبة python-docx مطلوبة", "error")
        return redirect(url_for("ip.view_trademark", app_id=app_id))


# ── AI: Fill Patent from Study ───────────────────────────────────────

@ip_bp.route("/api/ai-fill-patent", methods=["POST"])
@login_required
@csrf.exempt
def api_ai_fill_patent():
    data = request.get_json() or {}
    app_id = data.get("patent_id")
    patent = PatentApplication.query.get_or_404(app_id)
    if patent.user_id != current_user.id:
        return jsonify({"error": "Unauthorized"}), 403

    report = patent.report
    synthesis = report.synthesis_result or {}

    filing_label = FILING_TYPE_INFO.get(patent.filing_type, {}).get("name_ar", "")

    prompt = f"""أنت محامي ملكية فكرية متخصص في براءات الاختراع. بناءً على بيانات دراسة الجدوى التالية، أنشئ محتوى طلب براءة اختراع كامل لتقديمه إلى {filing_label}.

اسم المشروع: {report.project_name}
وصف المشروع: {report.project_description}
الملخص التنفيذي: {synthesis.get('executive_summary', '')}
تعريف MVP: {json.dumps(synthesis.get('mvp_definition', {}), ensure_ascii=False)[:800]}
التحليل التنافسي: {json.dumps(synthesis.get('competitive_analysis', {}), ensure_ascii=False)[:500]}
USP: {synthesis.get('usp', '')}

أرجع JSON بالتنسيق التالي:
{{
  "title_ar": "عنوان الاختراع بالعربية",
  "title_en": "Invention title in English",
  "technical_field": "وصف المجال التقني",
  "ipc_code": "رمز تصنيف IPC المقترح (مثل G06F 3/01)",
  "background_art": "خلفية الاختراع والمشكلة التقنية التي يحلها - فقرتين على الأقل",
  "invention_description": "وصف تفصيلي للاختراع يشمل كيفية العمل والمكونات - 3 فقرات على الأقل",
  "claims": [
    {{"type": "independent", "text": "مطالبة مستقلة 1"}},
    {{"type": "dependent", "text": "مطالبة تابعة 1"}},
    {{"type": "independent", "text": "مطالبة مستقلة 2"}},
    {{"type": "dependent", "text": "مطالبة تابعة 2"}}
  ],
  "abstract_ar": "ملخص الاختراع بالعربية (150 كلمة كحد أقصى)",
  "abstract_en": "Invention abstract in English (max 150 words)",
  "drawings_description": "وصف الرسومات التوضيحية المقترحة",
  "patentability_score": {{
    "novelty": 85,
    "inventive_step": 75,
    "industrial_applicability": 90,
    "overall": 83,
    "assessment": "تقييم شامل لقابلية الحصول على براءة"
  }}
}}

مهم: اكتب بلغة قانونية احترافية مناسبة لطلبات البراءات. أرجع JSON فقط."""

    from app.ai.diamond import call_ai, run_sync
    try:
        messages = [
            {"role": "system", "content": "أنت محامي ملكية فكرية. أرجع JSON فقط بدون markdown."},
            {"role": "user", "content": prompt},
        ]
        result = run_sync(call_ai(messages, model_type="deep"))
        result_clean = result.strip()
        if result_clean.startswith("```"):
            result_clean = result_clean.split("\n", 1)[-1].rsplit("```", 1)[0].strip()
        content = json.loads(result_clean)
        patent.ai_generated_content = content
        db.session.commit()
        return jsonify({"content": content})
    except json.JSONDecodeError:
        return jsonify({"error": "AI returned invalid format"}), 500
    except Exception as e:
        return jsonify({"error": str(e)}), 500


# ── AI: Generate Claims ──────────────────────────────────────────────

@ip_bp.route("/api/ai-generate-claims", methods=["POST"])
@login_required
@csrf.exempt
def api_ai_generate_claims():
    data = request.get_json() or {}
    description = data.get("description", "")
    title = data.get("title", "")

    prompt = f"""بناءً على وصف الاختراع التالي، أنشئ عناصر حماية (مطالبات) احترافية:

عنوان الاختراع: {title}
وصف الاختراع: {description}

أنشئ 6-8 مطالبات تشمل:
- 2-3 مطالبات مستقلة (تغطي المنتج، الطريقة، والنظام)
- 3-5 مطالبات تابعة

أرجع JSON:
{{"claims": [{{"type": "independent", "text": "..."}}, {{"type": "dependent", "text": "..."}}]}}"""

    from app.ai.diamond import call_ai, run_sync
    try:
        messages = [
            {"role": "system", "content": "أنت محامي براءات. أرجع JSON فقط."},
            {"role": "user", "content": prompt},
        ]
        result = run_sync(call_ai(messages, model_type="fast"))
        result_clean = result.strip()
        if result_clean.startswith("```"):
            result_clean = result_clean.split("\n", 1)[-1].rsplit("```", 1)[0].strip()
        return jsonify(json.loads(result_clean))
    except Exception as e:
        return jsonify({"error": str(e)}), 500


# ── AI: Prior Art Search ─────────────────────────────────────────────

@ip_bp.route("/api/ai-prior-art", methods=["POST"])
@login_required
@csrf.exempt
def api_ai_prior_art():
    data = request.get_json() or {}
    title = data.get("title", "")
    description = data.get("description", "")

    prompt = f"""أنت باحث في براءات الاختراع. قم بتحليل الاختراع التالي وابحث عن التقنية السابقة (Prior Art):

عنوان الاختراع: {title}
الوصف: {description}

أرجع JSON:
{{
  "prior_art": [
    {{"title": "عنوان البراءة/المنشور", "source": "المصدر", "relevance": "عالية/متوسطة/منخفضة", "summary": "ملخص", "difference": "الفرق عن اختراعنا"}}
  ],
  "novelty_assessment": "تقييم الجدة",
  "inventive_step_assessment": "تقييم الخطوة الابتكارية",
  "recommendations": ["توصية 1", "توصية 2"],
  "risk_level": "منخفض/متوسط/عالي"
}}"""

    from app.ai.diamond import call_ai, run_sync
    try:
        messages = [
            {"role": "system", "content": "أنت باحث براءات اختراع. أرجع JSON فقط."},
            {"role": "user", "content": prompt},
        ]
        result = run_sync(call_ai(messages, model_type="deep"))
        result_clean = result.strip()
        if result_clean.startswith("```"):
            result_clean = result_clean.split("\n", 1)[-1].rsplit("```", 1)[0].strip()
        return jsonify(json.loads(result_clean))
    except Exception as e:
        return jsonify({"error": str(e)}), 500


# ── AI: Fill Trademark ───────────────────────────────────────────────

@ip_bp.route("/api/ai-fill-trademark", methods=["POST"])
@login_required
@csrf.exempt
def api_ai_fill_trademark():
    data = request.get_json() or {}
    tm_id = data.get("trademark_id")
    tm = TrademarkApplication.query.get_or_404(tm_id)
    if tm.user_id != current_user.id:
        return jsonify({"error": "Unauthorized"}), 403

    report = tm.report
    synthesis = report.synthesis_result or {} if report else {}

    prompt = f"""أنت خبير علامات تجارية. بناءً على بيانات المشروع التالية، اقترح محتوى طلب تسجيل علامة تجارية:

اسم المشروع: {report.project_name if report else ''}
الوصف: {report.project_description if report else ''}
USP: {synthesis.get('usp', '')}

أرجع JSON:
{{
  "brand_name_ar": "اسم العلامة بالعربية",
  "brand_name_en": "Brand name in English",
  "suggested_classes": [9, 42],
  "goods_services_description": "وصف تفصيلي للسلع والخدمات",
  "color_claim": "وصف الألوان المطلوب حمايتها",
  "alternative_names": ["اسم بديل 1", "اسم بديل 2"],
  "logo_description": "وصف الشعار المقترح"
}}"""

    from app.ai.diamond import call_ai, run_sync
    try:
        messages = [
            {"role": "system", "content": "أنت خبير علامات تجارية. أرجع JSON فقط."},
            {"role": "user", "content": prompt},
        ]
        result = run_sync(call_ai(messages, model_type="fast"))
        result_clean = result.strip()
        if result_clean.startswith("```"):
            result_clean = result_clean.split("\n", 1)[-1].rsplit("```", 1)[0].strip()
        content = json.loads(result_clean)
        tm.ai_generated_content = content
        db.session.commit()
        return jsonify({"content": content})
    except Exception as e:
        return jsonify({"error": str(e)}), 500
