package model

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

// PostingLine represents a single debit or credit line in a journal entry.
type PostingLine struct {
	storable.Base               `bson:",inline" json:",inline"`
	model.OrganizationBoundBase `bson:",inline" json:",inline"`

	JournalEntryRef bson.ObjectID `bson:"journalEntryRef" json:"journalEntryRef"`
	AccountRef      bson.ObjectID `bson:"accountRef" json:"accountRef"`
	Amount          string        `bson:"amount" json:"amount"`     // stored as string for exact decimal, positive = credit, negative = debit
	Currency        string        `bson:"currency" json:"currency"` // ISO 4217 currency code
	LineType        LineType      `bson:"lineType" json:"lineType"` // main, fee, spread, reversal
}

// Collection implements storable.Storable.
func (*PostingLine) Collection() string {
	return PostingLinesCollection
}
