package organization_test

import (
	"strings"
	"testing"

	"github.com/get-drexa/drexa/internal/organization"
)

func TestNormalizeSlug(t *testing.T) {
	tests := []struct {
		name    string
		input   string
		want    string
		wantErr bool
	}{
		{
			name:  "lowercases and trims",
			input: "  Test-Org ",
			want:  "test-org",
		},
		{
			name:  "allows single char",
			input: "a",
			want:  "a",
		},
		{
			name:  "allows max length",
			input: strings.Repeat("a", 63),
			want:  strings.Repeat("a", 63),
		},
		{
			name:    "rejects empty",
			input:   "",
			wantErr: true,
		},
		{
			name:    "rejects too long",
			input:   strings.Repeat("a", 64),
			wantErr: true,
		},
		{
			name:    "rejects reserved",
			input:   "my",
			wantErr: true,
		},
		{
			name:    "rejects invalid chars",
			input:   "bad_slug",
			wantErr: true,
		},
		{
			name:    "rejects leading hyphen",
			input:   "-bad",
			wantErr: true,
		},
		{
			name:    "rejects trailing hyphen",
			input:   "bad-",
			wantErr: true,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got, err := organization.NormalizeSlug(tt.input)
			if tt.wantErr {
				if err == nil {
					t.Fatalf("expected error, got none (slug=%q)", got)
				}
				return
			}
			if err != nil {
				t.Fatalf("unexpected error: %v", err)
			}
			if got != tt.want {
				t.Fatalf("unexpected slug: got %q want %q", got, tt.want)
			}
		})
	}
}
