package Auth

import (
	"errors"
	"net/http"

	"git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
	"git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
)

func CheckCookie(r *http.Request) (Models.Session, error) {
	var (
		c            *http.Cookie
		sessionToken string
		userSession  Models.Session
		err          error
	)

	c, err = r.Cookie("session_token")
	if err != nil {
		return userSession, err
	}
	sessionToken = c.Value

	// We then get the session from our session map
	userSession, err = Database.GetSessionByID(sessionToken)
	if err != nil {
		return userSession, errors.New("Cookie not found")
	}

	// If the session is present, but has expired, we can delete the session, and return
	// an unauthorized status
	if userSession.IsExpired() {
		Database.DeleteSession(&userSession)
		return userSession, errors.New("Cookie expired")
	}

	return userSession, nil
}

func CheckCookieCurrentUser(w http.ResponseWriter, r *http.Request) (Models.User, error) {
	var (
		session  Models.Session
		userData Models.User
		err      error
	)

	session, err = CheckCookie(r)
	if err != nil {
		return userData, err
	}

	return session.User, nil
}
