package templates

import (
	"net/http"
	"time"

	"git.kirsle.net/apps/gosocial/pkg/config"
	"git.kirsle.net/apps/gosocial/pkg/log"
	"git.kirsle.net/apps/gosocial/pkg/models"
	"git.kirsle.net/apps/gosocial/pkg/session"
)

// MergeVars mixes in globally available template variables. The http.Request is optional.
func MergeVars(r *http.Request, m map[string]interface{}) {
	m["Title"] = config.Title
	m["Subtitle"] = config.Subtitle
	m["YYYY"] = time.Now().Year()

	if r == nil {
		return
	}

	m["Request"] = r
}

// MergeUserVars mixes in global template variables: LoggedIn and CurrentUser. The http.Request is optional.
func MergeUserVars(r *http.Request, m map[string]interface{}) {
	// Defaults
	m["LoggedIn"] = false
	m["CurrentUser"] = nil
	m["NavUnreadMessages"] = 0
	m["NavFriendRequests"] = 0
	m["NavAdminNotifications"] = 0  // total count of admin notifications for nav
	m["NavCertificationPhotos"] = 0 // admin indicator for certification photos
	m["NavAdminFeedback"] = 0       // admin indicator for unread feedback
	m["SessionImpersonated"] = false

	if r == nil {
		return
	}

	m["SessionImpersonated"] = session.Impersonated(r)

	if user, err := session.CurrentUser(r); err == nil {
		m["LoggedIn"] = true
		m["CurrentUser"] = user

		// Get unread message count.
		if count, err := models.CountUnreadMessages(user.ID); err == nil {
			m["NavUnreadMessages"] = count
		} else {
			log.Error("MergeUserVars: couldn't CountUnreadMessages for %d: %s", user.ID, err)
		}

		// Get friend request count.
		if count, err := models.CountFriendRequests(user.ID); err == nil {
			m["NavFriendRequests"] = count
		} else {
			log.Error("MergeUserVars: couldn't CountFriendRequests for %d: %s", user.ID, err)
		}

		// Are we admin?
		if user.IsAdmin {
			// Any pending certification photos or feedback?
			var (
				certPhotos = models.CountCertificationPhotosNeedingApproval()
				feedback   = models.CountUnreadFeedback()
			)
			m["NavCertificationPhotos"] = certPhotos
			m["NavAdminFeedback"] = feedback

			// Total notification count for admin actions.
			m["NavAdminNotifications"] = certPhotos + feedback
		}
	}
}
