package core

// RecordProxy defines an interface for a Record proxy/project model,
// aka. custom model struct that acts on behalve the proxied Record to
// allow for example typed getter/setters for the Record fields.
//
// To implement the interface it is usually enough to embed the [BaseRecordProxy] struct.
type RecordProxy interface {
	// ProxyRecord returns the proxied Record model.
	ProxyRecord() *Record

	// SetProxyRecord loads the specified record model into the current proxy.
	SetProxyRecord(record *Record)
}

var _ RecordProxy = (*BaseRecordProxy)(nil)

// BaseRecordProxy implements the [RecordProxy] interface and it is intended
// to be used as embed to custom user provided Record proxy structs.
type BaseRecordProxy struct {
	*Record
}

// ProxyRecord returns the proxied Record model.
func (m *BaseRecordProxy) ProxyRecord() *Record {
	return m.Record
}

// SetProxyRecord loads the specified record model into the current proxy.
func (m *BaseRecordProxy) SetProxyRecord(record *Record) {
	m.Record = record
}