package model

import (
	"time"

	"github.com/tech/sendico/pkg/db/storable"
)

// RateSnapshot stores a normalized FX rate observation.
type RateSnapshot struct {
	storable.Base `bson:",inline" json:",inline"`

	RateRef     string       `bson:"rateRef" json:"rateRef"`
	Pair        CurrencyPair `bson:"pair" json:"pair"`
	Provider    string       `bson:"provider" json:"provider"`
	Mid         string       `bson:"mid,omitempty" json:"mid,omitempty"`
	Bid         string       `bson:"bid,omitempty" json:"bid,omitempty"`
	Ask         string       `bson:"ask,omitempty" json:"ask,omitempty"`
	SpreadBps   string       `bson:"spreadBps,omitempty" json:"spreadBps,omitempty"`
	AsOfUnixMs  int64        `bson:"asOfUnixMs" json:"asOfUnixMs"`
	AsOf        *time.Time   `bson:"asOf,omitempty" json:"asOf,omitempty"`
	Source      string       `bson:"source,omitempty" json:"source,omitempty"`
	ProviderRef string       `bson:"providerRef,omitempty" json:"providerRef,omitempty"`
}

// Collection implements storable.Storable.
func (*RateSnapshot) Collection() string {
	return RatesCollection
}

// AsOfTime converts the stored millisecond timestamp to time.Time.
func (r *RateSnapshot) AsOfTime() time.Time {
	return time.UnixMilli(r.AsOfUnixMs)
}
