import json
from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, current_app
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 CompanyRegistration

company_bp = Blueprint("company", __name__, url_prefix="/company")

ENTITY_TYPES = [
    {"value": "llc", "label_ar": "شركة ذات مسؤولية محدودة", "label_en": "LLC"},
    {"value": "jsc", "label_ar": "شركة مساهمة", "label_en": "Joint Stock Company"},
    {"value": "sole", "label_ar": "مؤسسة فردية", "label_en": "Sole Proprietorship"},
    {"value": "branch", "label_ar": "فرع شركة أجنبية", "label_en": "Foreign Branch"},
    {"value": "professional", "label_ar": "شركة مهنية", "label_en": "Professional Company"},
]

SA_SECTORS = [
    "تقنية المعلومات", "تجارة إلكترونية", "مطاعم وأغذية", "عقارات",
    "استشارات", "تعليم وتدريب", "صحة وطب", "نقل ولوجستيات",
    "سياحة وترفيه", "صناعة", "زراعة", "خدمات مالية",
]


@company_bp.route("/register/<int:report_id>", methods=["GET", "POST"])
@login_required
def register(report_id):
    report = Report.query.get_or_404(report_id)
    if report.user_id != current_user.id:
        return redirect(url_for("dashboard.index"))

    existing = CompanyRegistration.query.filter_by(report_id=report_id).first()

    if request.method == "POST":
        reg = existing or CompanyRegistration(
            user_id=current_user.id,
            report_id=report.id,
        )
        reg.company_name_ar = request.form.get("company_name_ar", report.project_name)
        reg.company_name_en = request.form.get("company_name_en", "")
        reg.entity_type = request.form.get("entity_type", "llc")
        reg.country = request.form.get("country", "SA")
        reg.capital = request.form.get("capital", 0) or 0
        reg.activities_json = request.form.getlist("activities")
        reg.owners_json = json.loads(request.form.get("owners_json", "[]"))
        reg.status = "submitted"

        if not existing:
            db.session.add(reg)
        db.session.commit()

        flash("تم حفظ بيانات التأسيس بنجاح", "success")
        return redirect(url_for("company.status", reg_id=reg.id))

    return render_template(
        "company/register.html",
        report=report,
        registration=existing,
        entity_types=ENTITY_TYPES,
        sectors=SA_SECTORS,
    )


@company_bp.route("/status/<int:reg_id>")
@login_required
def status(reg_id):
    reg = CompanyRegistration.query.get_or_404(reg_id)
    if reg.user_id != current_user.id:
        return redirect(url_for("dashboard.index"))
    return render_template("company/status.html", registration=reg)


@company_bp.route("/api/legal-advice", methods=["POST"])
@login_required
@csrf.exempt
def api_legal_advice():
    data = request.get_json() or {}
    report_id = data.get("report_id")
    entity_type = data.get("entity_type", "llc")
    country = data.get("country", "SA")
    activities = data.get("activities", [])

    report = Report.query.get_or_404(report_id)
    if report.user_id != current_user.id:
        return jsonify({"error": "Unauthorized"}), 403

    prompt = f"""أنت مستشار قانوني متخصص في تأسيس الشركات في المملكة العربية السعودية والإمارات.

المشروع: {report.project_name}
الوصف: {report.project_description}
نوع الكيان: {entity_type}
الدولة: {country}
الأنشطة: {', '.join(activities)}

قدم تحليلاً شاملاً يتضمن:
1. التراخيص المطلوبة (من وزارة التجارة، MISA، البلدية، إلخ)
2. الحد الأدنى لرأس المال المطلوب
3. المستندات المطلوبة
4. الرسوم التقديرية
5. المدة المتوقعة للتأسيس
6. متطلبات خاصة بالنشاط
7. الزكاة والضرائب المتوقعة (VAT + زكاة)
8. مدى توافق المشروع مع رؤية 2030
9. نصائح قانونية مهمة

أجب باللغة العربية بتنسيق HTML منظم."""

    from app.ai.diamond import call_ai, run_sync

    try:
        messages = [{"role": "system", "content": "أنت مستشار قانوني متخصص."}, {"role": "user", "content": prompt}]
        result = run_sync(call_ai(messages, model_type="deep"))

        reg = CompanyRegistration.query.filter_by(report_id=report_id).first()
        if reg:
            reg.ai_legal_advice = result
            db.session.commit()

        return jsonify({"advice": result})
    except Exception as e:
        return jsonify({"error": str(e)}), 500


@company_bp.route("/api/wathq-lookup", methods=["POST"])
@login_required
@csrf.exempt
def api_wathq_lookup():
    data = request.get_json() or {}
    cr_number = data.get("cr_number", "")

    wathq_key = current_app.config.get("WATHQ_API_KEY", "")
    if not wathq_key:
        return jsonify({"error": "WATHQ API key not configured"}), 400

    import requests as req
    try:
        resp = req.get(
            f"https://api.wathq.sa/v5/commercialregistration/info/{cr_number}",
            headers={"apiKey": wathq_key, "Accept": "application/json"},
            timeout=30,
        )
        resp.raise_for_status()
        return jsonify(resp.json())
    except Exception as e:
        return jsonify({"error": str(e)}), 500


# ─── AI Auto-Fill Company Registration ───────────────────
@company_bp.route("/api/ai-fill", methods=["POST"])
@login_required
@csrf.exempt
def api_ai_fill():
    from app.ai.diamond import call_ai, run_sync
    data = request.get_json() or {}
    report_id = data.get("report_id")
    report = Report.query.get_or_404(report_id)
    if report.user_id != current_user.id:
        return jsonify({"error": "غير مصرح"}), 403

    synthesis = report.synthesis_result or {}
    sectors = [
        "تقنية المعلومات", "تجارة إلكترونية", "مطاعم وأغذية", "عقارات",
        "استشارات", "تعليم وتدريب", "صحة وطب", "نقل ولوجستيات",
        "سياحة وترفيه", "صناعة", "زراعة", "خدمات مالية",
    ]
    entity_types = "llc, jsc, sole, branch, professional"
    prompt = f"""بناءً على بيانات دراسة الجدوى التالية، اقترح بيانات تأسيس الشركة المناسبة.

اسم المشروع: {report.project_name}
الوصف: {report.project_description}
الملخص: {synthesis.get('executive_summary', '')[:400]}

أنواع الكيانات المتاحة: {entity_types}
القطاعات المتاحة: {', '.join(sectors)}
الدول: SA, AE, BH, KW, OM, QA

أرجع JSON فقط:
{{
  "company_name_ar": "اسم الشركة بالعربي",
  "company_name_en": "Company Name in English",
  "entity_type": "llc",
  "country": "SA",
  "capital": 100000,
  "activities": ["القطاع1", "القطاع2"]
}}"""

    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 exc:
        return jsonify({"error": str(exc)}), 500
