package recognize

import (
	"context"
	"strings"
	"testing"
)

// Промпт задаёт язык локализованного title и не трогает original_title.
func TestSystemPrompt_LanguageDirective(t *testing.T) {
	en := systemPrompt("en")
	if !strings.Contains(en, "английском") {
		t.Errorf("en-промпт без директивы «английском»:\n%s", en)
	}
	ru := systemPrompt("ru")
	if !strings.Contains(ru, "русском") {
		t.Errorf("ru-промпт без директивы «русском»:\n%s", ru)
	}
	for _, p := range []string{en, ru} {
		// Директива касается только title; original_title остаётся на оригинале.
		if !strings.Contains(p, "\"original_title\" всегда на языке оригинала") {
			t.Errorf("промпт не оговаривает original_title:\n%s", p)
		}
		// Fallback на оригинал при отсутствии перевода (защита от ложного авто-матча).
		if !strings.Contains(p, "оригинальное название, не выдумывай") {
			t.Errorf("промпт не задаёт fallback на оригинал:\n%s", p)
		}
	}
}

// Сквозной путь: язык из Config доезжает через New до системного сообщения LLM.
// Ловит регресс проводки, который иначе тих (пустой язык → английский = дефолт).
func TestRecognize_LanguageReachesSystemPrompt(t *testing.T) {
	const resp = `{"type":"movie","title":"X","files":[{"src":"a.mkv","role":"main"}]}`
	in := Input{Name: "X", Files: []File{{Path: "a.mkv", Size: 1 << 30}}}

	cases := map[string]string{"ru": "русском", "en": "английском", "": "английском"}
	for lang, want := range cases {
		f := &fakeLLM{responses: []string{resp}}
		r := New(f, nil, Config{Language: lang}, testLogger())
		if _, err := r.Recognize(context.Background(), in); err != nil {
			t.Fatalf("Recognize(lang=%q): %v", lang, err)
		}
		sys := f.lastReq.Messages[0].Content
		if !strings.Contains(sys, want) {
			t.Errorf("lang=%q: системное сообщение без %q:\n%s", lang, want, sys)
		}
	}
}

// Незаданный язык в сборке промпта → английская директива (дефолт en).
func TestSystemPrompt_DefaultsToEnglish(t *testing.T) {
	def := systemPrompt("")
	if !strings.Contains(def, "английском") {
		t.Errorf("дефолтный промпт не английский:\n%s", def)
	}
}
