package common

import (
	"dbweb/core"
	"dbweb/lib/lsession"
	"dbweb/lib/safe"
	"encoding/base64"
	"encoding/json"

	"github.com/pborman/uuid"
)

type SessionText struct{}
type SessionTextGetResult struct {
	Err string
	Val string
}
type SessionTextPostResult struct {
	Err string
	ID  string
}
type SessionTextCall struct {
	Val string
}

func init() {
	core.RegisterFun("SessionText", new(SessionText))
}
func (m *SessionText) Post(p *core.ElementHandleArgs) {
	decoder := json.NewDecoder(p.Req.Body)
	data := &SessionTextCall{}
	if err := decoder.Decode(data); err != nil {
		core.LOG.Panic(err)
	}
	id := []byte(uuid.NewUUID())
	p.LSession.Set(id, data.Val)
	p.Render.JSON(200, SessionTextPostResult{"", base64.RawURLEncoding.EncodeToString(id)})
}
func (m *SessionText) Get(p *core.ElementHandleArgs) {
	p.Render.JSON(200, SessionTextGetResult{"", GetSessionText(
		p.LSession, p.Req.URL.Query().Get("id"))})
}
func GetSessionText(s *lsession.Session, idstr string) string {
	id, err := base64.RawURLEncoding.DecodeString(idstr)
	if err != nil {
		core.LOG.Panic(err)
	} else {
		return safe.String(s.Get(id))
	}
	return ""

}
