package user import "math" // Activity level multipliers (Mifflin-St Jeor). var activityMultiplier = map[string]float64{ "low": 1.375, "moderate": 1.55, "high": 1.725, } // Goal adjustments in kcal. var goalAdjustment = map[string]float64{ "lose": -500, "maintain": 0, "gain": 300, } // CalculateDailyCalories computes the daily calorie target using the // Mifflin-St Jeor equation. Returns nil if any required parameter is missing. func CalculateDailyCalories(heightCM *int, weightKG *float64, age *int, gender, activity, goal *string) *int { if heightCM == nil || weightKG == nil || age == nil || gender == nil || activity == nil || goal == nil { return nil } // BMR = 10 * weight(kg) + 6.25 * height(cm) - 5 * age bmr := 10**weightKG + 6.25*float64(*heightCM) - 5*float64(*age) switch *gender { case "male": bmr += 5 case "female": bmr -= 161 default: return nil } mult, ok := activityMultiplier[*activity] if !ok { return nil } adj, ok := goalAdjustment[*goal] if !ok { return nil } tdee := bmr * mult result := int(math.Round(tdee + adj)) return &result }