package server

import (
	"reflect"
	"sort"
	"testing"
)

func TestExpandYearValue(t *testing.T) {
	tests := []struct {
		name string
		raw  string
		want []string
	}{
		{name: "hyphen range expands the full series", raw: "2012-2016", want: []string{"2012", "2013", "2014", "2015", "2016"}},
		{name: "hyphen range with spaces expands the full series", raw: "2012 - 2016", want: []string{"2012", "2013", "2014", "2015", "2016"}},
		{name: "reversed range normalizes", raw: "2016-2012", want: []string{"2012", "2013", "2014", "2015", "2016"}},
		{name: "comma list is discrete", raw: "2012, 2026", want: []string{"2012", "2026"}},
		{name: "comma list without spaces is discrete", raw: "2012,2026", want: []string{"2012", "2026"}},
		{name: "single year", raw: "2012", want: []string{"2012"}},
		{name: "single year with padding", raw: " 2012 ", want: []string{"2012"}},
		{name: "range plus discrete year", raw: "2012-2016, 2020", want: []string{"2012", "2013", "2014", "2015", "2016", "2020"}},
		{name: "duplicate pieces collapse", raw: "2012, 2012, 2013-2014", want: []string{"2012", "2013", "2014"}},
		{name: "junk is ignored", raw: "abc, 2012 y 2016", want: []string{}},
		{name: "empty string", raw: "", want: []string{}},
		{name: "range with bad endpoints is ignored", raw: "2012-16", want: []string{}},
		{name: "range with extra digits is ignored", raw: "2012-20160", want: []string{}},
		{name: "absurd range span is ignored", raw: "1900-2026", want: []string{}},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := expandYearValue(tt.raw)
			if len(tt.want) == 0 && len(got) == 0 {
				return
			}
			want := append([]string(nil), tt.want...)
			sort.Strings(want)
			sort.Strings(got)
			if !reflect.DeepEqual(got, want) {
				t.Errorf("expandYearValue(%q) = %v, want %v", tt.raw, got, want)
			}
		})
	}
}
