package status

import (
	"github.com/shirou/gopsutil/v3/cpu"
	"github.com/shirou/gopsutil/v3/load"
)

type CPUStatus struct {
	NumCores    int
	CPUInfo     []cpu.InfoStat
	CPUPercent  float64
	CPULoads    *load.AvgStat
	SystemLoads *load.AvgStat
}

func GetCPUStatus() (*CPUStatus, error) {
	numCores, err := cpu.Counts(true)
	if err != nil {
		return nil, err
	}

	cpuInfo, err := cpu.Info()
	if err != nil {
		return nil, err
	}

	cpuPercent, err := cpu.Percent(0, false)
	if err != nil {
		return nil, err
	}

	cpuLoads, err := load.Avg()
	if err != nil {
		return nil, err
	}

	systemLoads, err := load.Avg()
	if err != nil {
		return nil, err
	}

	return &CPUStatus{
		NumCores:    numCores,
		CPUInfo:     cpuInfo,
		CPUPercent:  cpuPercent[0],
		CPULoads:    cpuLoads,
		SystemLoads: systemLoads,
	}, nil

}
