package events

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

// GraphDeltaReadyEvent is published when a graph delta between commits is ready.
type GraphDeltaReadyEvent struct {
	metadata.Envelope
	RepoID             string `json:"repo_id"`
	BaseCommitSHA      string `json:"base_commit_sha"`
	TargetCommitSHA    string `json:"target_commit_sha"`
	DeltaArtifactID    string `json:"delta_artifact_id"`
	DeltaArtifactURI   string `json:"delta_artifact_uri"`
	GraphSchemaVersion string `json:"graph_schema_version"`
	AddedNodes         int    `json:"added_nodes,omitempty"`
	RemovedNodes       int    `json:"removed_nodes,omitempty"`
	ChangedEdges       int    `json:"changed_edges,omitempty"`
	metadata.GitCommitMetadata
}

// NewGraphDeltaReadyEvent creates a v1 graph-delta-ready event.
func NewGraphDeltaReadyEvent(eventID, repoID, baseCommitSHA, targetCommitSHA, deltaArtifactID, deltaArtifactURI, graphSchemaVersion string) GraphDeltaReadyEvent {
	return GraphDeltaReadyEvent{
		Envelope:           metadata.NewEnvelope(eventID),
		RepoID:             repoID,
		BaseCommitSHA:      baseCommitSHA,
		TargetCommitSHA:    targetCommitSHA,
		DeltaArtifactID:    deltaArtifactID,
		DeltaArtifactURI:   deltaArtifactURI,
		GraphSchemaVersion: graphSchemaVersion,
	}
}
