//go:build (linux && !android) || windows || (darwin && !ios)

package system

import (
	"context"
	"sync"
	"time"

	"github.com/netbirdio/netbird/client/system/detect_cloud"
	"github.com/netbirdio/netbird/client/system/detect_platform"
)

var (
	staticInfo StaticInfo
	once       sync.Once
)

func init() {
	go func() {
		_ = updateStaticInfo()
	}()
}

func updateStaticInfo() StaticInfo {
	once.Do(func() {
		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
		defer cancel()
		wg := sync.WaitGroup{}
		wg.Add(3)
		go func() {
			staticInfo.SystemSerialNumber, staticInfo.SystemProductName, staticInfo.SystemManufacturer = sysInfo()
			wg.Done()
		}()
		go func() {
			staticInfo.Environment.Cloud = detect_cloud.Detect(ctx)
			wg.Done()
		}()
		go func() {
			staticInfo.Environment.Platform = detect_platform.Detect(ctx)
			wg.Done()
		}()
		wg.Wait()
	})
	return staticInfo
}
