// Package payload는 에이전트 → 수집 서버 전송 페이로드 모델을 정의합니다.
// (백엔드 HostPayloadSchema와 일치해야 합니다)
package payload

type SystemMetrics struct {
	CpuUsage     float64  `json:"cpu_usage"`
	MemoryUsage  float64  `json:"memory_usage"`
	DiskUsage    float64  `json:"disk_usage"`
	Load1m       *float64 `json:"load_1m"`
	Load5m       *float64 `json:"load_5m"`
	Load15m      *float64 `json:"load_15m"`
	BytesSent    int64    `json:"bytes_sent"`
	BytesRecv    int64    `json:"bytes_recv"`
	DiskReadBps  int64    `json:"disk_read_bps"`
	DiskWriteBps int64    `json:"disk_write_bps"`
	UptimeSec    int64    `json:"uptime_sec"`    // 부팅 후 경과 시간(초)
	ProcsTotal   int64    `json:"procs_total"`   // 전체 프로세스 수
	ProcsRunning int64    `json:"procs_running"` // 실행(R) 상태 프로세스 수 (리눅스 외 환경은 0)
	MemTotal     int64    `json:"mem_total"`     // 메모리 총량(bytes)
	MemUsed      int64    `json:"mem_used"`      // 메모리 사용량(bytes)
	DiskTotal    int64    `json:"disk_total"`    // 루트(/) 디스크 총량(bytes)
	DiskUsed     int64    `json:"disk_used"`     // 루트(/) 디스크 사용량(bytes)
}

type ServicePayload struct {
	Type      string                 `json:"type"`
	Name      string                 `json:"name"`
	Runtime   string                 `json:"runtime"`
	Container string                 `json:"container,omitempty"`
	Image     string                 `json:"image,omitempty"`
	Status    string                 `json:"status"`
	Metrics   map[string]interface{} `json:"metrics"`
}

type HostPayload struct {
	Hostname    string           `json:"hostname"`
	IpAddress   string           `json:"ip_address"`
	OsInfo      string           `json:"os_info"`
	CollectedAt string           `json:"collected_at,omitempty"` // 수집 시각(RFC3339) — 버퍼 재전송 시 원래 시각 보존용
	System      SystemMetrics    `json:"system"`
	Services    []ServicePayload `json:"services"`
}
