package storage

import (
	"git.defalsify.org/vise.git/db"
	"git.defalsify.org/vise.git/persist"
)

type Storage struct {
	Persister *persist.Persister
	UserdataDb db.Db	
}

type StorageProvider interface {
	Get(sessionId string) (*Storage, error)
	Put(sessionId string, storage *Storage) error
	Close() error
}

type SimpleStorageProvider struct {
	*Storage
}

func NewSimpleStorageProvider(stateStore db.Db, userdataStore db.Db) StorageProvider {
	pe := persist.NewPersister(stateStore)
	pe = pe.WithFlush()
	return &SimpleStorageProvider{
		Storage: &Storage{
			Persister: pe,
			UserdataDb: userdataStore,
		},
	}
}

func (p *SimpleStorageProvider) Get(sessionId string) (*Storage, error) {
	return p.Storage, nil
}

func (p *SimpleStorageProvider) Put(sessionId string, storage *Storage) error {
	return nil
}

func (p *SimpleStorageProvider) Close() error {
	return p.Storage.UserdataDb.Close()
}