import os
from langchain_community.embeddings.sentence_transformer import SentenceTransformerEmbeddings
from langchain_community.vectorstores import Chroma
from django.conf import settings

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DB_DIR = os.path.join(BASE_DIR, 'chroma_db')

def tanya_lkb_api(soalan):
    """
    Query the Local Knowledge Base (LKB) using OpenAI for both embeddings and generation.
    """
    try:
        from openai import OpenAI # <-- Tukar ke OpenAI
        
        # 1. Buka pangkalan data (LKB) - Menggunakan Model Lokal
        embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
        vector_db = Chroma(persist_directory=DB_DIR, embedding_function=embeddings)
        
        # 2. Cari maklumat yang berkaitan dengan soalan (RETRIEVAL)
        hasil_carian = vector_db.similarity_search(soalan, k=3) 
        
        if not hasil_carian:
            return "Maaf, tiada maklumat ditemui di dalam dokumen LKB anda."
            
        konteks_rujukan = "\n\n".join([doc.page_content for doc in hasil_carian])
        
        # 3. Bina arahan (Prompt)
        prompt = f"""
        Anda adalah Perunding Strategi, Penganalisis Polisi, dan Pakar AI yang berwawasan tinggi untuk Kerajaan Malaysia.
        Gunakan MAKLUMAT RUJUKAN di bawah sebagai asas fakta untuk memahami konteks syarikat, produk, atau situasi.
        
        TUGASAN ANDA:
        1. Jawab soalan pengguna dengan merujuk kepada fakta dalam dokumen.
        2. JIKA pengguna meminta pendapat, unjuran jangka panjang, atau idea (seperti kesan kolaborasi, strategi masa depan, dll), anda DIBENARKAN dan DIGALAKKAN untuk berfikir di luar kotak. 
        3. Gunakan logik perniagaan, kepakaran analitik, dan kreativiti anda untuk MENCETUSKAN IDEA yang bernas dan rasional.
        4. Susun jawapan anda dengan kemas. Bahagikan jawapan kepada "Berdasarkan Dokumen" (fakta) dan "Analisis & Idea Strategik AI" (pendapat anda).
        
        MAKLUMAT RUJUKAN (Asas Fakta):
        {konteks_rujukan}
        
        SOALAN PENGGUNA: {soalan}
        
        JAWAPAN PROFESIONAL ANDA:
        """
        
        # 4. Panggil OpenAI GPT (GENERATION)
        client = OpenAI(api_key=settings.OPENAI_API_KEY)
        resp = client.chat.completions.create(
            model=getattr(settings, 'LLM_MODEL', 'gpt-4o-mini'),
            messages=[{"role": "user", "content": prompt}]
        )
        
        return resp.choices[0].message.content.strip()
        
    except Exception as e:
        return f"Ralat sistem AI: {str(e)}"