"""FikoYT Flux Loader — Flux dev / schnell / kontext + 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


FLUX_PRESETS = {
    "flux1-dev (fp8)":     {"repo": "Comfy-Org/flux1-dev",     "file": "flux1-dev-fp8.safetensors"},
    "flux1-schnell (fp8)": {"repo": "Comfy-Org/flux1-schnell", "file": "flux1-schnell-fp8.safetensors"},
    "flux1-kontext-dev":   {"repo": "black-forest-labs/FLUX.1-Kontext-dev", "file": "flux1-kontext-dev.safetensors"},
}


class FikoYTFluxLoader:
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "preset": (list(FLUX_PRESETS.keys()), {"default": "flux1-dev (fp8)"}),
                "auto_download": ("BOOLEAN", {"default": True}),
            }
        }

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

    def load(self, preset, auto_download):
        meta = FLUX_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"Checkpoint bulunamadı: {ckpt_path}\nauto_download=True yapın veya dosyayı manuel indirin."
                )

        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 = {"FikoYTFluxLoader": FikoYTFluxLoader}
NODE_DISPLAY_NAME_MAPPINGS = {"FikoYTFluxLoader": "FikoYT • Flux Loader"}
