package prediction

import (
	"testing"

	"github.com/rose_cat707/luminary/internal/model"
)

func TestValidateInputWithDefaultsOverride(t *testing.T) {
	overrides := map[string]any{"width": float64(768), "steps": float64(30)}
	out, err := ValidateInputWithDefaults(model.WorkflowTxt2Img, map[string]any{
		"prompt": "hello",
	}, overrides)
	if err != nil {
		t.Fatal(err)
	}
	if out["width"] != 768 && out["width"] != float64(768) {
		t.Fatalf("width got %#v", out["width"])
	}
	if out["steps"] != 30 && out["steps"] != float64(30) {
		t.Fatalf("steps got %#v", out["steps"])
	}
}

func TestOpenAPISchemaUsesModelDefaults(t *testing.T) {
	schema := OpenAPISchemaForWorkflow(model.WorkflowTxt2Img, "flux", "desc", map[string]any{
		"width": float64(768),
	})
	components := schema["components"].(map[string]any)
	schemas := components["schemas"].(map[string]any)
	input := schemas["Input"].(map[string]any)
	props := input["properties"].(map[string]any)
	width := props["width"].(map[string]any)
	if width["default"] != float64(768) {
		t.Fatalf("unexpected width default %#v", width["default"])
	}
}

func TestValidateInputPromptDefault(t *testing.T) {
	overrides := map[string]any{"prompt": "a scenic landscape"}
	out, err := ValidateInputWithDefaults(model.WorkflowTxt2Img, map[string]any{}, overrides)
	if err != nil {
		t.Fatal(err)
	}
	if out["prompt"] != "a scenic landscape" {
		t.Fatalf("prompt got %#v", out["prompt"])
	}
}

func TestValidateInputRequiredWithoutDefault(t *testing.T) {
	_, err := ValidateInputWithDefaults(model.WorkflowTxt2Img, map[string]any{}, map[string]any{})
	if err == nil {
		t.Fatal("expected missing prompt error")
	}
}
