"""FikoYT SDXL Loader — Curated SDXL preset listesi + auto-download."""
import os

try:
    import folder_paths
    import comfy.sd
except ImportError:
    folder_paths = None
    comfy = None

from ..core import ensure_model, get_models_dir


SDXL_PRESETS = {
    "Juggernaut XL v9":        {"repo": "RunDiffusion/Juggernaut-XL-v9",        "file": "Juggernaut-XL_v9_RunDiffusionPhoto_v2.safetensors"},
    "RealVisXL V5.0":          {"repo": "SG161222/RealVisXL_V5.0",              "file": "RealVisXL_V5.0_fp16.safetensors"},
    "DreamShaper XL Turbo":    {"repo": "Lykon/dreamshaper-xl-turbo",           "file": "DreamShaperXL_Turbo_v2_1.safetensors"},
    "SDXL Base 1.0":           {"repo": "stabilityai/stable-diffusion-xl-base-1.0", "file": "sd_xl_base_1.0.safetensors"},
}


class FikoYTSDXLLoader:
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "preset": (list(SDXL_PRESETS.keys()), {"default": "Juggernaut XL v9"}),
                "auto_download": ("BOOLEAN", {"default": True}),
                "precision": (["auto", "fp16", "bf16", "fp8_e4m3fn"], {"default": "auto"}),
            }
        }

    RETURN_TYPES = ("MODEL", "CLIP", "VAE")
    RETURN_NAMES = ("MODEL", "CLIP", "VAE")
    FUNCTION = "load"
    CATEGORY = "FikoYT/image"

    def load(self, preset, auto_download, precision):
        meta = SDXL_PRESETS[preset]
        ckpt_dir = get_models_dir("checkpoints")
        ckpt_path = os.path.join(ckpt_dir, meta["file"])

        if not os.path.isfile(ckpt_path):
            if auto_download:
                ckpt_path = ensure_model(meta["repo"], meta["file"], "checkpoints")
            else:
                raise FileNotFoundError(
                    f"SDXL checkpoint bulunamadı: {ckpt_path}\n"
                    "auto_download=True yapın veya dosyayı manuel indirin."
                )

        if comfy is None:
            raise RuntimeError("comfy.sd modülü yok — ComfyUI ortamında çalıştırın.")

        emb_dirs = folder_paths.get_folder_paths("embeddings") if folder_paths else []
        out = comfy.sd.load_checkpoint_guess_config(
            ckpt_path,
            output_vae=True,
            output_clip=True,
            embedding_directory=emb_dirs,
        )
        return (out[0], out[1], out[2])


NODE_CLASS_MAPPINGS = {"FikoYTSDXLLoader": FikoYTSDXLLoader}
NODE_DISPLAY_NAME_MAPPINGS = {"FikoYTSDXLLoader": "FikoYT • SDXL Loader"}
