package fees

import (
	"context"
	"time"

	"github.com/tech/sendico/billing/fees/internal/service/fees/types"
	"github.com/tech/sendico/billing/fees/storage/model"
	feesv1 "github.com/tech/sendico/pkg/proto/billing/fees/v1"
	tracev1 "github.com/tech/sendico/pkg/proto/common/trace/v1"
)

// Calculator isolates fee rule evaluation logic so it can be reused and tested.
// Implementation lives under internal/service/fees/internal/calculator.
type Calculator interface {
	Compute(ctx context.Context, plan *model.FeePlan, intent *feesv1.Intent, bookedAt time.Time, trace *tracev1.TraceContext) (*types.CalculationResult, error)
}
