package builder

import (
	"github.com/tech/sendico/pkg/mservice"
	"go.mongodb.org/mongo-driver/v2/mongo"
)

type Pipeline interface {
	Match(filter Query) Pipeline
	Lookup(from mservice.Type, localField, foreignField, as Field) Pipeline
	LookupWithPipeline(
		from mservice.Type,
		pipeline Pipeline, // your nested pipeline
		as Field,
		let *map[string]Field, //  optional e.g. {"projRef": Field("$_id")}
	) Pipeline
	// unwind with functional options
	Unwind(path Field, opts ...UnwindOption) Pipeline
	Count(field Field) Pipeline
	Group(groupBy Alias, accumulators ...GroupAccumulator) Pipeline
	Project(projections ...Projection) Pipeline
	ReplaceRoot(newRoot Expression) Pipeline
	Build() mongo.Pipeline
}
