package calc import "caltrack/types" // BMR calculates Basal Metabolic Rate using Mifflin-St Jeor equation. func BMR(cfg types.Config) float64 { weight := cfg.CurrentWeightKg height := float64(cfg.HeightCm) age := float64(cfg.Age) if cfg.Sex == "female" { return 10*weight + 6.25*height - 5*age - 161 } return 10*weight + 6.25*height - 5*age + 5 } // ActivityMultiplier returns the multiplier for the given activity level. func ActivityMultiplier(level string) float64 { switch level { case "sedentary": return 1.2 case "light": return 1.375 case "moderate": return 1.55 case "active": return 1.725 default: return 1.55 } } // TDEE calculates Total Daily Energy Expenditure. func TDEE(cfg types.Config) float64 { return BMR(cfg) * ActivityMultiplier(cfg.ActivityLevel) } // DailyTarget calculates the daily calorie target accounting for desired deficit. func DailyTarget(cfg types.Config) int { tdee := TDEE(cfg) // 1 kg of fat ≈ 7700 kcal dailyDeficit := (cfg.WeeklyLossKg * 7700) / 7 target := tdee - dailyDeficit if target < 1200 { target = 1200 } return int(target) } // Deficit returns the daily calorie deficit. func Deficit(cfg types.Config) int { return int(TDEE(cfg)) - DailyTarget(cfg) }