package store

import (
	"errors"
	"time"

	"git.haelnorr.com/h/oslstats/internal/discord"
	"github.com/bwmarrin/discordgo"
)

type RegistrationSession struct {
	DiscordUser *discordgo.User
	Token       *discord.Token
	ExpiresAt   time.Time
}

func (s *Store) CreateRegistrationSession(user *discordgo.User, token *discord.Token) (string, error) {
	if user == nil {
		return "", errors.New("user cannot be nil")
	}
	if token == nil {
		return "", errors.New("token cannot be nil")
	}
	id := generateID()
	s.sessions.Store(id, &RegistrationSession{
		DiscordUser: user,
		Token:       token,
		ExpiresAt:   time.Now().Add(5 * time.Minute),
	})
	return id, nil
}

func (s *Store) GetRegistrationSession(id string) (*RegistrationSession, bool) {
	val, ok := s.sessions.Load(id)
	if !ok {
		return nil, false
	}

	session := val.(*RegistrationSession)
	if time.Now().After(session.ExpiresAt) {
		s.sessions.Delete(id)
		return nil, false
	}

	return session, true
}
