"""FikoYT Image Inpaint — generic inpainting (MODEL + IMAGE + MASK + prompt → IMAGE)."""
try:
    import torch
    import comfy.sample
    import comfy.samplers
    from nodes import VAEEncodeForInpaint, common_ksampler, VAEDecode
except ImportError:
    torch = None
    VAEEncodeForInpaint = None
    common_ksampler = None
    VAEDecode = None

from ..core import normalize_seed


class FikoYTImageInpaint:
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "model": ("MODEL",),
                "vae": ("VAE",),
                "positive": ("CONDITIONING",),
                "negative": ("CONDITIONING",),
                "image": ("IMAGE",),
                "mask": ("MASK",),
                "seed": ("INT", {"default": -1, "min": -1, "max": 0xFFFFFFFF}),
                "steps": ("INT", {"default": 25, "min": 1, "max": 200}),
                "cfg": ("FLOAT", {"default": 7.0, "min": 0.0, "max": 30.0, "step": 0.1}),
                "sampler_name": (comfy.samplers.KSampler.SAMPLERS, {"default": "dpmpp_2m"}),
                "scheduler": (comfy.samplers.KSampler.SCHEDULERS, {"default": "karras"}),
                "denoise": ("FLOAT", {"default": 0.85, "min": 0.0, "max": 1.0, "step": 0.01}),
                "grow_mask_by": ("INT", {"default": 6, "min": 0, "max": 64}),
            }
        }

    RETURN_TYPES = ("IMAGE",)
    FUNCTION = "inpaint"
    CATEGORY = "FikoYT/image"

    def inpaint(self, model, vae, positive, negative, image, mask,
                seed, steps, cfg, sampler_name, scheduler, denoise, grow_mask_by):
        if torch is None:
            raise RuntimeError("torch yüklü değil")

        seed = normalize_seed(seed)
        encoder = VAEEncodeForInpaint()
        latent = encoder.encode(vae, image, mask, grow_mask_by)[0]

        sampled = common_ksampler(
            model, seed, steps, cfg, sampler_name, scheduler,
            positive, negative, latent, denoise=denoise,
        )[0]

        decoder = VAEDecode()
        out_image = decoder.decode(vae, sampled)[0]
        return (out_image,)


NODE_CLASS_MAPPINGS = {"FikoYTImageInpaint": FikoYTImageInpaint}
NODE_DISPLAY_NAME_MAPPINGS = {"FikoYTImageInpaint": "FikoYT • Image Inpaint"}
