package api_test

import (
	"testing"
	"time"

	apicontract "bit.admedia.com/scm/ad/adpilot-indexing-repo-sync.com/internal/contracts/api"
	"bit.admedia.com/scm/ad/adpilot-indexing-repo-sync.com/internal/domain"
)

func TestRepositoryFromDomain(t *testing.T) {
	lastSync := time.Date(2026, 5, 26, 10, 0, 0, 0, time.UTC)
	updated := time.Date(2026, 5, 26, 10, 5, 0, 0, time.UTC)

	repo := domain.Repository{
		RepoID:        "ad/example-repo",
		CloneURL:      "https://bit.admedia.com/scm/ad/example-repo.git",
		DefaultRef:    "master",
		LastCommitSHA: "abc123",
		LastSyncAt:    lastSync,
		Status:        domain.RepositoryStatusActive,
		UpdatedAt:     updated,
	}

	got := apicontract.RepositoryFromDomain(repo)
	if got.RepoID != repo.RepoID {
		t.Fatalf("repo_id: got %q, want %q", got.RepoID, repo.RepoID)
	}
	if got.CloneURL != repo.CloneURL {
		t.Fatalf("clone_url: got %q, want %q", got.CloneURL, repo.CloneURL)
	}
	if got.DefaultRef != repo.DefaultRef {
		t.Fatalf("default_ref: got %q, want %q", got.DefaultRef, repo.DefaultRef)
	}
	if got.LastCommitSHA != repo.LastCommitSHA {
		t.Fatalf("last_commit_sha: got %q, want %q", got.LastCommitSHA, repo.LastCommitSHA)
	}
	if !got.LastSyncAt.Equal(repo.LastSyncAt) {
		t.Fatalf("last_sync_at: got %v, want %v", got.LastSyncAt, repo.LastSyncAt)
	}
	if got.Status != repo.Status {
		t.Fatalf("status: got %q, want %q", got.Status, repo.Status)
	}
	if !got.UpdatedAt.Equal(repo.UpdatedAt) {
		t.Fatalf("updated_at: got %v, want %v", got.UpdatedAt, repo.UpdatedAt)
	}
}
