"""FikoYT Prompt Builder — template + placeholder doldurma + opsiyonel karakter base_prompt prefix."""
from ..core import FIKOYT_CHARACTER


class FikoYTPromptBuilder:
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "template": ("STRING", {
                    "default": "{character}, {scene}, {style}, {quality}",
                    "multiline": True,
                }),
                "scene": ("STRING", {"default": "", "multiline": True}),
                "style": ("STRING", {"default": "cinematic, photorealistic"}),
                "quality": ("STRING", {"default": "high detail, 8k, sharp focus"}),
            },
            "optional": {
                "character": (FIKOYT_CHARACTER,),
            },
        }

    RETURN_TYPES = ("STRING",)
    RETURN_NAMES = ("prompt",)
    FUNCTION = "build"
    CATEGORY = "FikoYT/util"

    def build(self, template, scene, style, quality, character=None):
        char_text = ""
        base_prefix = ""
        if isinstance(character, dict):
            char_text = character.get("name", "") or ""
            base_prefix = character.get("base_prompt", "") or ""

        out = template or ""
        for key, val in (
            ("{character}", char_text),
            ("{scene}", scene or ""),
            ("{style}", style or ""),
            ("{quality}", quality or ""),
        ):
            out = out.replace(key, val)

        if base_prefix:
            out = f"{base_prefix}, {out}" if out.strip() else base_prefix

        # Boş virgülleri temizle
        cleaned = ", ".join(p.strip() for p in out.split(",") if p.strip())
        return (cleaned,)


NODE_CLASS_MAPPINGS = {"FikoYTPromptBuilder": FikoYTPromptBuilder}
NODE_DISPLAY_NAME_MAPPINGS = {"FikoYTPromptBuilder": "FikoYT • Prompt Builder"}
