package middleware

import (
	"net/http"

	"api_yal/internal/logger"

	"go.uber.org/zap"
)

// AdminOnlyMiddleware проверяет, что пользователь имеет права администратора
func AdminOnlyMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		l := logger.Get()

		role, ok := GetUserRole(r.Context())
		if !ok {
			l.Warn("Admin check: user role not found in context")
			http.Error(w, "Unauthorized", http.StatusUnauthorized)
			return
		}

		if role != "admin" {
			l.Warn("Admin check: insufficient permissions",
				zap.String("role", role))
			http.Error(w, "Admin access required", http.StatusForbidden)
			return
		}

		next.ServeHTTP(w, r)
	})
}

// ModeratorOrAdminMiddleware проверяет, что пользователь имеет права модератора или администратора
func ModeratorOrAdminMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		role, ok := GetUserRole(r.Context())
		if !ok {
			http.Error(w, "Unauthorized", http.StatusUnauthorized)
			return
		}

		if role != "admin" && role != "moderator" {
			http.Error(w, "Moderator or admin access required", http.StatusForbidden)
			return
		}

		next.ServeHTTP(w, r)
	})
}
