package git_test

import (
	"testing"

	"bit.admedia.com/scm/ad/adpilot-indexing-repo-sync.com/internal/contracts/events"
	"bit.admedia.com/scm/ad/adpilot-indexing-repo-sync.com/internal/git"
)

func TestClassifyFile(t *testing.T) {
	tests := []struct {
		path     string
		language string
		kind     events.FileKind
	}{
		{path: "internal/config/config.go", language: "go", kind: events.FileKindCode},
		{path: "docs/architecture.md", language: "markdown", kind: events.FileKindDocs},
		{path: "internal/config/config_test.go", language: "go", kind: events.FileKindTest},
		{path: "package.json", language: "json", kind: events.FileKindConfig},
		{path: "package-lock.json", language: "json", kind: events.FileKindConfig},
		{path: "yarn.lock", language: "lock", kind: events.FileKindConfig},
		{path: ".gitignore", language: "gitignore", kind: events.FileKindConfig},
		{path: "go.mod", language: "mod", kind: events.FileKindConfig},
		{path: "go.sum", language: "sum", kind: events.FileKindConfig},
		{path: "scripts/pm2-dev.sh", language: "shell", kind: events.FileKindConfig},
		{path: "Dockerfile", language: "unknown", kind: events.FileKindConfig},
		{path: "assets/logo.png", language: "png", kind: events.FileKindAsset},
		{path: "README", language: "unknown", kind: events.FileKindUnknown},
		{path: "public/index.html", language: "html", kind: events.FileKindCode},
		{path: "src/App.vue", language: "vue", kind: events.FileKindCode},
		{path: "resources/views/home.blade.php", language: "blade", kind: events.FileKindCode},
		{path: "styles/main.scss", language: "scss", kind: events.FileKindCode},
		{path: "lib/main.dart", language: "dart", kind: events.FileKindCode},
		{path: "scripts/init.lua", language: "lua", kind: events.FileKindCode},
		{path: "tests/unit/main_test.go", language: "go", kind: events.FileKindTest},
		{path: "src/__tests__/app.test.ts", language: "typescript", kind: events.FileKindTest},
		{path: "guide.rst", language: "rst", kind: events.FileKindUnknown},
	}

	for _, tt := range tests {
		t.Run(tt.path, func(t *testing.T) {
			language, kind := git.ClassifyFile(tt.path)
			if language != tt.language {
				t.Errorf("language: got %q, want %q", language, tt.language)
			}
			if kind != tt.kind {
				t.Errorf("file_kind: got %q, want %q", kind, tt.kind)
			}
		})
	}
}
