package auth

import (
	"os"
	"time"

	"github.com/thermokarst/bactdb/Godeps/_workspace/src/github.com/thermokarst/jwt"
	"github.com/thermokarst/bactdb/models"
)

var (
	// Middleware is for JWT
	Middleware *jwt.Middleware
	// Config handles JWT middleware configuration
	Config = &jwt.Config{
		Secret: os.Getenv("SECRET"),
		Auth:   models.DbAuthenticate,
		Claims: claimsFunc,
	}
)

func claimsFunc(email string) (map[string]interface{}, error) {
	// TODO: use helper
	currentTime := time.Now()
	user, err := models.DbGetUserByEmail(email)
	if err != nil {
		return nil, err
	}
	return map[string]interface{}{
		"name": user.Name,
		"iss":  "bactdb",
		"sub":  user.ID,
		"role": user.Role,
		"iat":  currentTime.Unix(),
		"exp":  currentTime.Add(time.Minute * 60).Unix(),
		"ref":  "",
	}, nil
}

func init() {
	var err error
	Middleware, err = jwt.New(Config)
	if err != nil {
		panic(err)
	}
}