package model

import (
	"github.com/openaccounting/oa-server/core/model/db"
	"github.com/openaccounting/oa-server/core/model/types"
	"github.com/openaccounting/oa-server/core/util"
)

var Instance Interface

type Model struct {
	db     db.Datastore
	bcrypt util.Bcrypt
	config types.Config
}


type Interface interface {
	UserInterface
	OrgInterface
	AccountInterface
	TransactionInterface
	AttachmentInterface
	PriceInterface
	SessionInterface
	ApiKeyInterface
	SystemHealthInteface
	BudgetInterface
	GetTransaction(string, string, string) (*types.Transaction, error)
}

func NewModel(db db.Datastore, bcrypt util.Bcrypt, config types.Config) *Model {
	model := &Model{db: db, bcrypt: bcrypt, config: config}
	Instance = model
	return model
}

