// posting_line.go
package ledger

import (
	"github.com/shopspring/decimal"
	"github.com/tech/sendico/pkg/db/storable"
	"github.com/tech/sendico/pkg/model"
	"github.com/tech/sendico/pkg/mservice"
	"go.mongodb.org/mongo-driver/v2/bson"
)

// LineType is a closed set of posting line roles within an entry.
type LineType string

const (
	LineMain     LineType = "main"
	LineFee      LineType = "fee"
	LineSpread   LineType = "spread"
	LineReversal LineType = "reversal"
)

type PostingLine struct {
	storable.Base `bson:",inline" json:",inline"`

	JournalEntryRef  bson.ObjectID `bson:"journalEntryRef"  json:"journalEntryRef"`
	LedgerAccountRef bson.ObjectID `bson:"ledgerAccountRef" json:"ledgerAccountRef"`

	// Amount sign convention: positive = credit, negative = debit
	Amount   decimal.Decimal `bson:"amount"   json:"amount"`
	Currency model.Currency  `bson:"currency" json:"currency"`

	LineType LineType `bson:"lineType" json:"lineType"`
}

func (p *PostingLine) Collection() string {
	return mservice.LedgerPlines
}
