import os
import sys
from dotenv import load_dotenv

# ─── 1. مسار المشروع والبيئة ───────────────────────────────────────────────────
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PARENT_DIR = os.path.dirname(BASE_DIR)

# تحميل متغيرات البيئة بذكاء:
# 1. ملف python_embedder/.env أولاً إذا كان موجوداً
# 2. ملف لارافيل الرئيسي .env (بحيث يقرأ بيانات MySQL وإعدادات cPanel مباشرة دون تكرار)
env_parent = os.path.join(PARENT_DIR, '.env')
env_local = os.path.join(BASE_DIR, '.env')

if os.path.exists(env_parent):
    load_dotenv(dotenv_path=env_parent, override=False)
if os.path.exists(env_local):
    load_dotenv(dotenv_path=env_local, override=False)

# ─── 2. قاعدة البيانات (متوافقة مع cPanel MySQL و Linux Sockets) ───────────────────
DB_HOST = os.getenv("DB_HOST", "127.0.0.1")
db_port_raw = os.getenv("DB_PORT", "3306")
DB_PORT = int(db_port_raw) if (db_port_raw and str(db_port_raw).isdigit()) else 3306
DB_USER = os.getenv("DB_USERNAME", os.getenv("DB_USER", "reekoo_qroleg"))
DB_PASS = os.getenv("DB_PASSWORD", os.getenv("DB_PASS", "28sb3v707j4r83si"))
DB_NAME = os.getenv("DB_DATABASE", os.getenv("DB_NAME", "reekoo_qroleg"))

DB = dict(
    host     = DB_HOST,
    port     = DB_PORT,
    user     = DB_USER,
    password = DB_PASS,
    database = DB_NAME,
)

# دعم مقابس Unix Socket الخاصة بسيرفرات cPanel ولينكس (أسرع وأكثر استقراراً في الاستضافات)
unix_socket = os.getenv("DB_SOCKET", os.getenv("MYSQL_UNIX_SOCKET", ""))
if not unix_socket and DB_HOST in ("localhost", "127.0.0.1"):
    # فحص المقابس الشائعة في cPanel / CloudLinux / CentOS / Ubuntu
    common_cpanel_sockets = [
        "/var/lib/mysql/mysql.sock",
        "/tmp/mysql.sock",
        "/var/run/mysqld/mysqld.sock",
    ]
    for sock in common_cpanel_sockets:
        if os.path.exists(sock):
            unix_socket = sock
            break

if unix_socket and os.path.exists(unix_socket):
    DB["unix_socket"] = unix_socket

# ─── 3. جهاز التشغيل والذكاء الاصطناعي (متوافق مع cPanel Linux) ─────────────────────
# في لينكس و cPanel: لا يتوفر mps (الخاص بالماك)، الافتراضي الآمن هو cpu أو cuda إن توفرت بطاقة رسومية
def get_default_device():
    try:
        import torch
        if torch.cuda.is_available():
            return "cuda"
        if sys.platform == "darwin" and hasattr(torch.backends, "mps") and torch.backends.mps.is_available():
            return "mps"
    except Exception:
        pass
    return "cpu"

EMBEDDING_DEVICE     = os.getenv("EMBEDDING_DEVICE", get_default_device())
EMBEDDING_MODEL      = os.getenv("EMBEDDING_MODEL", "intfloat/multilingual-e5-base")

# تقليل حجم الدفعة افتراضياً إلى 16 لتجنب نفاد الذاكرة (OOM) في سيرفرات cPanel
batch_raw = os.getenv("EMBEDDING_BATCH_SIZE", "16")
EMBEDDING_BATCH_SIZE = int(batch_raw) if (batch_raw and str(batch_raw).isdigit()) else 16

DENSE_SEARCH_ENABLED = os.getenv("DENSE_SEARCH_ENABLED", "true").lower() in ("1", "true", "yes", "on")
DENSE_SEARCH_MODE    = os.getenv(
    "DENSE_SEARCH_MODE",
    "model" if DENSE_SEARCH_ENABLED else "prf"
).strip().lower()

prf_raw = os.getenv("PRF_SEED_K", "5")
PRF_SEED_K           = int(prf_raw) if (prf_raw and str(prf_raw).isdigit()) else 5
PRF_MIN_SPARSE_SCORE = float(os.getenv("PRF_MIN_SPARSE_SCORE", "0.005"))
PRF_SEMANTIC_WEIGHT  = float(os.getenv("PRF_SEMANTIC_WEIGHT", "0.35"))

# ─── 4. مجلد تخزين النماذج (Model Cache) ───────────────────────────────────────
# تخزين النماذج داخل مجلد محلي بالاستضافة لتفادي قيود الصلاحيات في ~/.cache
MODELS_CACHE_DIR = os.getenv("TRANSFORMERS_CACHE", os.path.join(BASE_DIR, "models_cache"))
os.environ.setdefault("HF_HOME", MODELS_CACHE_DIR)
os.environ.setdefault("TRANSFORMERS_CACHE", MODELS_CACHE_DIR)

# ─── 5. مسارات ملفات المعرفة والمستندات (RAG Storage) ───────────────────────────
RAG_DIR = os.getenv(
    "RAG_DIR",
    os.path.join(PARENT_DIR, "storage", "app", "public", "rag_sources")
)

# ─── 6. إعدادات خادم الـ API (متوافقة مع لارافيل و cPanel Passenger) ─────────────
# في cPanel أو CloudLinux Passenger يُمرر المنفذ عبر متغير PORT
API_HOST  = os.getenv("API_HOST", "127.0.0.1")
port_raw  = os.getenv("PORT", os.getenv("API_PORT", "8001"))
API_PORT  = int(port_raw) if (port_raw and str(port_raw).isdigit()) else 8001
API_TITLE = "Meezan AI Saudi Legal Vector Search (Hybrid) API"

