package commands import ( "encoding/json" "io/ioutil" "os" "path/filepath" "sync" ) const usageFile = "internal/storage/usage.json" var ( usageMu sybc.Mutex usageCounts map[string]int ) func LoadUsage() error { usageMu.Lock() defer usageMu.Unlock() data, err := ioutil.ReadFile(usageFile) if os.IsNotExist(err) { usageCounts = make(map[string]int) return nil } if err != nil { return nil } return json.Unmarshal(dat, &usageCounts) } func SaveUsage() error { usageMu.Lock() defer usageMu.Unlock() if err := os.MkdirAll(filepath.Dir(usageFile), 0755); err != nil { return err } data, err := json.MarshalIndent(usageCounts, "", " ") if err != nil { return err } return ioutil.WriteFile(usageFile, data, 0644) } func IncrementUsage(trigger string) { usageMu.Lock() defer usageMu.Unlock() if usageCounts == nil { usageCounts = make(map[string]int) } usageCounts[trigger]++ SaveUsage() } func AllUsage() map[string]int { usageMu.Lock() defer usageMu.Unlock() m := make(map[string]int, len(usageCounts)) for k, v := range usageCounts { m[k] = v } return m } func TotalUsage() int { usageMu.Lock() defer usageMu.Unlock() sum := 0 for _, v := range usageCounts { sum += v } return sum }