package events

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

// GraphArtifactReadyEvent is published when a graph artifact has been produced.
type GraphArtifactReadyEvent struct {
	metadata.Envelope
	RepoID             string `json:"repo_id"`
	SnapshotID         string `json:"snapshot_id"`
	CommitSHA          string `json:"commit_sha"`
	ArtifactID         string `json:"artifact_id"`
	ArtifactURI        string `json:"artifact_uri"`
	ParserVersion      string `json:"parser_version"`
	GraphSchemaVersion string `json:"graph_schema_version"`
	NodeCount          int    `json:"node_count,omitempty"`
	EdgeCount          int    `json:"edge_count,omitempty"`
}

// NewGraphArtifactReadyEvent creates a v1 graph-artifact-ready event.
func NewGraphArtifactReadyEvent(eventID, repoID, snapshotID, commitSHA, artifactID, artifactURI, parserVersion, graphSchemaVersion string) GraphArtifactReadyEvent {
	return GraphArtifactReadyEvent{
		Envelope:           metadata.NewEnvelope(eventID),
		RepoID:             repoID,
		SnapshotID:         snapshotID,
		CommitSHA:          commitSHA,
		ArtifactID:         artifactID,
		ArtifactURI:        artifactURI,
		ParserVersion:      parserVersion,
		GraphSchemaVersion: graphSchemaVersion,
	}
}
