import json
import os

from flask import current_app
from google import genai
from google.genai import types
from PIL import Image


def diagnose_from_images(images):
    app_root = current_app.root_path
    physical_images = []
    for img_path in images:
        # Construct the full physical path on the server
        relative_path = img_path.lstrip("/")
        full_path = os.path.join(app_root, relative_path)
        physical_images.append(full_path)
    client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
    images = [Image.open(f"{img}") for img in physical_images]

    response = client.models.generate_content(
        model="gemini-2.5-pro",
        contents=[
            """ Sana 9 adet toraks BT kesiti vereceğim. Bunların tamamını detaylı bir şekilde inceleyerek dört temel patolojiyi değerlendireceksin. 
                Değerlendireceğin dört temel patoloji şunlardır:
                Pnömotoraks, Hemotoraks, Akciğer kontüzyonu, Kot kırığı.
                Toraks BT Kesitlerinde Ekranın solu, hastanın sağ tarafıdır. Çekim supin pozisyon. 
                Çıktıyı yalnızca aşağıdaki JSON formatında döndür:
                {
                    "Pnömotoraks": {
                        {"VarYok": "...", "Lokalizasyon": "...", "Açıklama": "...", "Belirsizlik": null}
                    },
                    "Hemotoraks": {
                        {"VarYok": "...", "Lokalizasyon": "...", "Açıklama": "...", "Belirsizlik": null}
                    },
                    "Akciğer kontüzyonu": {
                        {"VarYok": "...", "Lokalizasyon": "...", "Açıklama": "...", "Belirsizlik": null}
                    },
                    "Kot kırığı": {
                        {"VarYok": "...", "Lokalizasyon": "...", "Açıklama": "...", "Belirsizlik": null}
                    },
                }
            """,
            *images,
        ],
        config=types.GenerateContentConfig(
            thinking_config=types.ThinkingConfig(
                thinking_budget=2500
            ),  # Disables thinking
            system_instruction="Sen konusunda çok deneyimli bir acil tıp profesörüsün...",
            temperature=0,
            response_mime_type="application/json",
        ),
    )

    return json.loads(response.text)


# # for chunk in response:
# #     print(chunk.text, end="")

# last_result = {
#     "Analiz": [
#         {
#             "Patoloji": "Pnömotoraks",
#             "VarYok": "Yok",
#             "Lokalizasyon": "Uygulanamaz",
#             "Açıklama": "Sunulan kesitlerde plevral yapraklar arasında serbest hava saptanmamıştır. Akciğer parankimi toraks duvarına tam olarak yapışıktır.",
#             "Belirsizlik": None,
#         },
#         {
#             "Patoloji": "Hemotoraks",
#             "VarYok": "Var",
#             "Lokalizasyon": "Bilateral",
#             "Açıklama": "Her iki hemitoraksta posterior reseslerde dependan (yerçekimine bağlı) olarak biriken, plevral efüzyon ile uyumlu dansite artışları izlenmektedir. Travma kliniği ile birlikte değerlendirildiğinde bu bulgular bilateral hemotoraksı temsil etmektedir.",
#             "Belirsizlik": None,
#         },
#         {
#             "Patoloji": "Akciğer Kontüzyonu",
#             "VarYok": "Var",
#             "Lokalizasyon": "Bilateral",
#             "Açıklama": "Her iki akciğerin özellikle posterior ve bazal segmentlerinde yaygın, yama tarzında buzlu cam opasiteleri ve konsolidasyon alanları mevcuttur. Bulgular bilateral akciğer kontüzyonu ile uyumludur.",
#             "Belirsizlik": None,
#         },
#         {
#             "Patoloji": "Kot Kırığı",
#             "VarYok": "Belirsiz",
#             "Lokalizasyon": "Belirsiz",
#             "Açıklama": "Görüntüler akciğer parankim penceresinde sunulmuştur. Bu pencere ayarında kot kemik yapıların kortikal bütünlüğü net olarak değerlendirilemez. Kot kırığı varlığı veya yokluğu kesin olarak söylenemez, kemik penceresi gereklidir.",
#             "Belirsizlik": "Görüntüleme penceresi kemik yapıları değerlendirmek için uygun değil.",
#         },
#     ]
# }
