package httpapi

import (
	"testing"

	"git.vakhrushev.me/av/jellybit/internal/recognize"
)

func TestSeasonSummary(t *testing.T) {
	// ep — эпизодный файл с заданным (или nil) сезоном.
	ep := func(season *int) recognize.PlanFile {
		return recognize.PlanFile{Role: recognize.RoleEpisode, Season: season}
	}
	n := func(v int) *int { return &v }

	cases := []struct {
		name  string
		files []recognize.PlanFile
		want  string
	}{
		{"пусто", nil, ""},
		{"один сезон", []recognize.PlanFile{ep(n(2)), ep(n(2))}, "Сезон 2"},
		{"диапазон", []recognize.PlanFile{ep(n(1)), ep(n(2)), ep(n(3))}, "Сезоны 1–3"},
		{"разрыв", []recognize.PlanFile{ep(n(1)), ep(n(3)), ep(n(4))}, "Сезоны 1, 3–4"},
		{"несортированный вход", []recognize.PlanFile{ep(n(3)), ep(n(1)), ep(n(2))}, "Сезоны 1–3"},
		{"только спецвыпуски (nil)", []recognize.PlanFile{ep(nil)}, "Спецвыпуски"},
		{"только спецвыпуски (0)", []recognize.PlanFile{ep(n(0))}, "Спецвыпуски"},
		{"сезоны и спецвыпуски", []recognize.PlanFile{ep(n(1)), ep(n(2)), ep(nil)}, "Сезоны 1–2, спецвыпуски"},
		{"один сезон и спецвыпуски", []recognize.PlanFile{ep(n(1)), ep(nil)}, "Сезон 1, спецвыпуски"},
	}
	for _, c := range cases {
		t.Run(c.name, func(t *testing.T) {
			got := seasonSummary(recognize.Plan{Files: c.files})
			if got != c.want {
				t.Errorf("seasonSummary = %q, want %q", got, c.want)
			}
		})
	}
}

// Не-эпизодные файлы (main/subtitle/…) не влияют на сводку сезонов.
func TestSeasonSummary_IgnoresNonEpisodes(t *testing.T) {
	s := 2
	plan := recognize.Plan{Files: []recognize.PlanFile{
		{Role: recognize.RoleEpisode, Season: &s},
		{Role: recognize.RoleMain},
		{Role: recognize.RoleSubtitle},
		{Role: recognize.RoleIgnore},
	}}
	if got := seasonSummary(plan); got != "Сезон 2" {
		t.Errorf("seasonSummary = %q, want «Сезон 2»", got)
	}
}
