package globaleuserdata

import (
	"github.com/flamego/flamego"
	"github.com/flamego/session"
	"github.com/flamego/template"
	"github.com/jmoiron/sqlx"
	"github.com/rs/zerolog/log"
	"reflect"
)

func GlobalUserData(db *sqlx.DB) flamego.Handler {
	log.Debug().Msg("Handler")
	return flamego.ContextInvoker(func(c flamego.Context) {
		r := c.Value(reflect.TypeOf(template.Data{})).Interface().(template.Data)
		s := c.Value(reflect.TypeOf((*session.Session)(nil)).Elem()).Interface().(session.Session)

		userId := s.Get("user_id")
		r["g_user_id"] = userId
		if userId != nil {
			r["g_loggedin"] = true
			log.Debug().Msg("User Data Query")

			re := []struct{
				Username string
			}{}
			db.Select(&re, "SELECT username FROM users WHERE id = ?", userId)
			r["g_userName"] = re[0].Username
		}
		c.Next()
	})
}