package speed

import (
	"io/ioutil"
	"os"
	"runtime"
	"strings"
)

// cpuModelName returns the "model name" acc. to /proc/cpuinfo, or ""
// on error.
//
// Examples: On my desktop PC:
//
//   $ grep "model name" /proc/cpuinfo
//   model name	: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
//
// --> Returns "Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz".
//
// On a Raspberry Pi 4:
//
//   $ grep "model name" /proc/cpuinfo
//   (empty)
//   $ grep Hardware /proc/cpuinfo
//   Hardware	: BCM2835
//
// --> Returns "BCM2835"
func cpuModelName() string {
	if runtime.GOOS != "linux" {
		return ""
	}
	f, err := os.Open("/proc/cpuinfo")
	if err != nil {
		return ""
	}
	content, err := ioutil.ReadAll(f)
	if err != nil {
		return ""
	}
	lines := strings.Split(string(content), "\n")
	// Look for "model name", then for "Hardware" (arm devices don't have "model name")
	for _, want := range []string{"model name", "Hardware"} {
		for _, line := range lines {
			if strings.HasPrefix(line, want) {
				parts := strings.SplitN(line, ":", 2)
				if len(parts) != 2 {
					continue
				}
				return strings.TrimSpace(parts[1])
			}
		}
	}
	return ""
}
