package staros

import (
	"time"
)

const (
	KB = 1024
	MB = KB << 10
	GB = MB << 10
	TB = GB << 10
	PB = TB << 10
)
const (
	TCP_UNKNOWN = iota
	TCP_ESTABLISHED
	TCP_SYN_SENT
	TCP_SYN_RECV
	TCP_FIN_WAIT1
	TCP_FIN_WAIT2
	TCP_TIME_WAIT
	TCP_CLOSE
	TCP_CLOSE_WAIT
	TCP_LAST_ACL
	TCP_LISTEN
	TCP_CLOSING
)

var TCP_STATE = []string{"TCP_UNKNOWN", "TCP_ESTABLISHED", "TCP_SYN_SENT", "TCP_SYN_RECV", "TCP_FIN_WAIT1", "TCP_FIN_WAIT2", "TCP_TIME_WAIT", "TCP_CLOSE", "TCP_CLOSE_WAIT", "TCP_LAST_ACL", "TCP_LISTEN", "TCP_CLOSING"}

type NetAdapter struct {
	Name      string
	RecvBytes uint64
	SendBytes uint64
}

type NetSpeed struct {
	Name      string
	RecvBytes float64
	SendBytes float64
}

// Process 定义一个进程的信息
type Process struct {
	PPid      int64
	Pid       int64
	Name      string
	ExecPath  string
	LocalPath string
	Path      string
	Args      []string
	Env       []string
	RUID      int
	EUID      int
	RGID      int
	EGID      int
	TPid      int64
	Uptime    time.Time
	VmPeak    int64
	VmSize    int64
	VmLck     int64
	VmHWM     int64
	VmRSS     int64
	VmData    int64
	netConn   []NetConn
	netErr    error
	Err       error
}

func (p Process) GetNetConns() ([]NetConn, error) {
	return p.netConn, p.netErr
}

type MemStatus struct {
	All           uint64
	Used          uint64
	Free          uint64
	Shared        uint64
	BuffCache     uint64
	Available     uint64
	SwapAll       uint64
	SwapUsed      uint64
	SwapFree      uint64
	VirtualAll    uint64
	VirtualUsed   uint64
	VirtualAvail  uint64
	AvailExtended uint64
}

type DiskStatus struct {
	All       uint64
	Used      uint64
	Free      uint64
	Available uint64
}

type NetConn struct {
	LocalAddr    string
	LocalPort    int
	Typed        string
	RemoteAddr   string
	RemotePort   int
	Socket       string
	Inode        string
	Status       string
	TX_Queue     int64
	RX_Queue     int64
	TimerActive  string
	TimerJiffies int64
	RtoTimer     int64
	Pid          int64
	Uid          int64
	Process      *Process
}
