package utils

import (
	"cloud.o-forge.io/core/oc-lib/dbs"
	"cloud.o-forge.io/core/oc-lib/tools"
)

// ShallowDBObject is an interface that defines the basic methods shallowed version of a DBObject
type ShallowDBObject interface {
	GenerateID()
	GetID() string
	GetName() string
	Deserialize(j map[string]interface{}) DBObject
	Serialize() map[string]interface{}
}

// DBObject is an interface that defines the basic methods for a DBObject
type DBObject interface {
	GenerateID()
	GetID() string
	GetName() string
	UpToDate()
	Deserialize(j map[string]interface{}) DBObject
	Serialize() map[string]interface{}
	GetAccessor(caller *tools.HTTPCaller) Accessor
}

// Accessor is an interface that defines the basic methods for an Accessor
type Accessor interface {
	Init(t tools.DataType, caller *tools.HTTPCaller)
	GetType() string
	GetCaller() *tools.HTTPCaller
	Search(filters *dbs.Filters, search string) ([]ShallowDBObject, int, error)
	LoadAll() ([]ShallowDBObject, int, error)
	LoadOne(id string) (DBObject, int, error)
	DeleteOne(id string) (DBObject, int, error)
	CopyOne(data DBObject) (DBObject, int, error)
	StoreOne(data DBObject) (DBObject, int, error)
	UpdateOne(set DBObject, id string) (DBObject, int, error)
}
