package autonumber

import (
	"testing"
	"time"
)

func TestRenderTreatsCounterWidthAsMinimumPadding(t *testing.T) {
	spec, _, err := Parse("QT-{YY}{MM}{DD}{00}")
	if err != nil {
		t.Fatalf("Parse: %v", err)
	}

	assignedAt := time.Date(2026, 6, 28, 13, 15, 0, 0, time.UTC)
	tests := []struct {
		name    string
		counter int64
		want    string
	}{
		{name: "pads below width", counter: 7, want: "QT-26062807"},
		{name: "keeps exact width", counter: 99, want: "QT-26062899"},
		{name: "expands beyond width", counter: 100, want: "QT-260628100"},
		{name: "does not truncate wider values", counter: 1001, want: "QT-2606281001"},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got, err := Render(spec, assignedAt, tt.counter, nil)
			if err != nil {
				t.Fatalf("Render: %v", err)
			}
			if got != tt.want {
				t.Fatalf("Render = %q, want %q", got, tt.want)
			}
		})
	}
}

func TestRenderRejectsInvalidCounterValues(t *testing.T) {
	spec, _, err := Parse("QT-{00}")
	if err != nil {
		t.Fatalf("Parse: %v", err)
	}

	if _, err := Render(spec, time.Now(), -1, nil); err == nil {
		t.Fatal("Render negative counter succeeded, want error")
	}

	spec.CounterWidth = 0
	if _, err := Render(spec, time.Now(), 1, nil); err == nil {
		t.Fatal("Render invalid counter width succeeded, want error")
	}
}
