"""FikoYT Gallery Save — IMAGE'i ComfyUI/output/fikoyt/{project_name}/ altına kaydeder."""
import os
import time
import logging

try:
    import numpy as np
    from PIL import Image
except ImportError:
    np = None
    Image = None

log = logging.getLogger("FikoYT.gallery")


def _output_dir(project_name: str) -> str:
    try:
        import folder_paths
        base = folder_paths.get_output_directory()
    except Exception:
        here = os.path.dirname(os.path.abspath(__file__))
        base = os.path.abspath(os.path.join(here, "..", "..", "..", "..", "output"))
    safe = "".join(c for c in (project_name or "default").strip() if c.isalnum() or c in ("_", "-")) or "default"
    out = os.path.join(base, "fikoyt", safe)
    os.makedirs(out, exist_ok=True)
    return out


class FikoYTGallerySave:
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "images": ("IMAGE",),
                "project_name": ("STRING", {"default": "default"}),
                "filename_prefix": ("STRING", {"default": "fikoyt"}),
                "format": (["png", "jpg", "webp"], {"default": "png"}),
                "quality": ("INT", {"default": 95, "min": 1, "max": 100}),
            }
        }

    RETURN_TYPES = ("STRING",)
    RETURN_NAMES = ("saved_path",)
    OUTPUT_NODE = True
    FUNCTION = "save"
    CATEGORY = "FikoYT/util"

    def save(self, images, project_name, filename_prefix, format, quality):
        if np is None or Image is None:
            return ("",)
        out_dir = _output_dir(project_name)
        ts = int(time.time())
        prefix = "".join(c for c in (filename_prefix or "fikoyt").strip() if c.isalnum() or c in ("_", "-")) or "fikoyt"

        saved = []
        try:
            batch = images.detach().cpu().numpy() if hasattr(images, "detach") else np.asarray(images)
        except Exception as e:
            log.warning(f"Image tensor okunamadı: {e}")
            return ("",)

        for i, arr in enumerate(batch):
            arr8 = np.clip(arr * 255.0, 0, 255).astype(np.uint8)
            pil = Image.fromarray(arr8)
            ext = format.lower()
            fname = f"{prefix}_{ts}_{i:03d}.{ext}"
            fpath = os.path.join(out_dir, fname)
            try:
                if ext == "jpg":
                    pil.convert("RGB").save(fpath, "JPEG", quality=int(quality))
                elif ext == "webp":
                    pil.save(fpath, "WEBP", quality=int(quality))
                else:
                    pil.save(fpath, "PNG")
                saved.append(fpath)
            except Exception as e:
                log.warning(f"Kaydedilemedi {fpath}: {e}")

        return (saved[0] if saved else "",)


NODE_CLASS_MAPPINGS = {"FikoYTGallerySave": FikoYTGallerySave}
NODE_DISPLAY_NAME_MAPPINGS = {"FikoYTGallerySave": "FikoYT • Gallery Save"}
