package model

import (
	"time"

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

// AccountBalance represents the current balance of a ledger account.
// This is a materialized view updated atomically with journal entries.
type AccountBalance struct {
	storable.Base               `bson:",inline" json:",inline"`
	model.OrganizationBoundBase `bson:",inline" json:",inline"`

	AccountRef  bson.ObjectID `bson:"accountRef" json:"accountRef"`   // unique per account+currency
	Balance     string        `bson:"balance" json:"balance"`         // stored as string for exact decimal
	Currency    string        `bson:"currency" json:"currency"`       // ISO 4217 currency code
	Version     int64         `bson:"version" json:"version"`         // for optimistic locking
	LastUpdated time.Time     `bson:"lastUpdated" json:"lastUpdated"` // timestamp of last balance update
}

// Collection implements storable.Storable.
func (*AccountBalance) Collection() string {
	return AccountBalancesCollection
}
