"""genconfig_to_diffusers_kwargs — convierte GenerationConfig a kwargs para diffusers pipe()."""

from __future__ import annotations

import sys
import os

sys.path.insert(0, os.path.dirname(__file__))

from generation_config import GenerationConfig


def genconfig_to_diffusers_kwargs(cfg: GenerationConfig) -> dict:
    """Convierte un GenerationConfig al dict de kwargs listo para pipe(**kwargs) de diffusers.

    Solo mapea los campos que diffusers StableDiffusionPipeline.__call__ acepta
    directamente. Los LoRAs y el sampler/scheduler se configuran antes de la
    llamada via load_lora_weights() y pipe.scheduler = ...; no tienen mapping
    1:1 con kwargs de __call__.

    El campo "generator" se devuelve como None; el caller debe asignar
    torch.Generator(device=device).manual_seed(cfg.seed) por separado para
    poder reutilizar el GenerationConfig en distintos devices sin importar torch
    aqui (funcion pura).

    Args:
        cfg: Parametros de generacion validados. Debe ser instancia de GenerationConfig.

    Returns:
        dict con claves: prompt, negative_prompt, num_inference_steps,
        guidance_scale, width, height, generator (None).
    """
    return {
        "prompt": cfg.prompt,
        "negative_prompt": cfg.negative_prompt,
        "num_inference_steps": cfg.steps,
        "guidance_scale": cfg.cfg_scale,
        "width": cfg.width,
        "height": cfg.height,
        "generator": None,
    }
