package main

import (
	"time"

	"github.com/kataras/iris/v12"

	"github.com/kataras/iris/v12/sessions"
	"github.com/kataras/iris/v12/sessions/sessiondb/badger"

	"github.com/kataras/iris/v12/_examples/sessions/overview/example"
)

func main() {
	db, err := badger.New("./data")
	if err != nil {
		panic(err)
	}

	// close and unlock the database when control+C/cmd+C pressed
	iris.RegisterOnInterrupt(func() {
		db.Close()
	})

	defer db.Close() // close and unlock the database if application errored.

	// The default transcoder is the JSON one,
	// based on the https://golang.org/pkg/encoding/json/#Unmarshal
	// you can only retrieve numbers as float64 types:
	// * bool, for booleans
	// * float64, for numbers
	// * string, for strings
	// * []interface{}, for arrays
	// * map[string]interface{}, for objects.
	// If you want to save the data per go-specific types
	// you should change the DefaultTranscoder to the GobTranscoder one:
	// sessions.DefaultTranscoder = sessions.GobTranscoder{}

	sess := sessions.New(sessions.Config{
		Cookie:       "sessionscookieid",
		Expires:      1 * time.Minute, // <=0 means unlimited life. Defaults to 0.
		AllowReclaim: true,
	})

	sess.OnDestroy(func(sid string) {
		println(sid + " expired and destroyed from memory and its values from database")
	})

	//
	// IMPORTANT:
	//
	sess.UseDatabase(db)

	app := example.NewApp(sess)
	app.Listen(":8080")
}