package events

import (
	"bit.admedia.com/scm/ad/adpilot-indexing-repo-sync.com/internal/contracts/metadata"
)

// CommitsChangedEvent is published when one or more commits need analysis.
type CommitsChangedEvent struct {
	metadata.Envelope
	RepoID       string   `json:"repo_id"`
	SnapshotID   string   `json:"snapshot_id"`
	CommitSHA    string   `json:"commit_sha"`
	ParentSHA    string   `json:"parent_sha,omitempty"`
	Ref          string   `json:"ref,omitempty"`
	Author       string   `json:"author,omitempty"`
	Message      string   `json:"message,omitempty"`
	ChangedFiles []string `json:"changed_files,omitempty"`
	metadata.GitCommitMetadata
}

// NewCommitsChangedEvent creates a v1 commits-changed event.
func NewCommitsChangedEvent(eventID, repoID, snapshotID, commitSHA string) CommitsChangedEvent {
	return CommitsChangedEvent{
		Envelope:   metadata.NewEnvelope(eventID),
		RepoID:     repoID,
		SnapshotID: snapshotID,
		CommitSHA:  commitSHA,
	}
}
