package apimart

import (
	"encoding/json"
	"testing"
)

func TestVideoCapabilities(t *testing.T) {
	capabilities, ok := VideoCapabilities("doubao-seedance-2.0")
	if !ok {
		t.Fatal("expected Seedance 2 capabilities")
	}
	if capabilities.ReferenceImages.MaxCount != 9 || capabilities.ReferenceAudios.MaxCount != 3 || capabilities.ReferenceVideos.MaxCount != 3 {
		t.Fatalf("unexpected reference limits: %+v", capabilities)
	}
}

func TestBuildSeedance2PayloadSupportsVideoAndAudioReferences(t *testing.T) {
	input := json.RawMessage(`{
		"prompt":"test",
		"size":"16:9",
		"duration":5,
		"video_urls":["https://example.com/reference.mp4"],
		"audio_urls":["https://example.com/reference.mp3"]
	}`)
	payload, err := BuildSeedance2Payload("doubao-seedance-2.0", input)
	if err != nil {
		t.Fatalf("BuildSeedance2Payload() error = %v", err)
	}
	if videos, ok := payload["video_urls"].([]string); !ok || len(videos) != 1 {
		t.Fatalf("video_urls = %#v", payload["video_urls"])
	}
	if audios, ok := payload["audio_urls"].([]string); !ok || len(audios) != 1 {
		t.Fatalf("audio_urls = %#v", payload["audio_urls"])
	}
}

func TestBuildSeedance2PayloadRejectsTooManyVideos(t *testing.T) {
	input := json.RawMessage(`{
		"prompt":"test",
		"size":"16:9",
		"duration":5,
		"video_urls":["https://example.com/1.mp4","https://example.com/2.mp4","https://example.com/3.mp4","https://example.com/4.mp4"]
	}`)
	if _, err := BuildSeedance2Payload("doubao-seedance-2.0", input); err == nil {
		t.Fatal("expected too many reference videos to be rejected")
	}
}
