package models

import (
	"time"

	"github.com/google/uuid"
)

// StorageMetric represents a storage metric from an agent
type StorageMetric struct {
	ID             uuid.UUID              `json:"id" db:"id"`
	AgentID        uuid.UUID              `json:"agent_id" db:"agent_id"`
	Mountpoint     string                 `json:"mountpoint" db:"mountpoint"`
	Device         string                 `json:"device" db:"device"`
	DiskType       string                 `json:"disk_type" db:"disk_type"`
	Filesystem     string                 `json:"filesystem" db:"filesystem"`
	TotalBytes     int64                  `json:"total_bytes" db:"total_bytes"`
	UsedBytes      int64                  `json:"used_bytes" db:"used_bytes"`
	AvailableBytes int64                  `json:"available_bytes" db:"available_bytes"`
	UsedPercent    float64                `json:"used_percent" db:"used_percent"`
	Severity       string                 `json:"severity" db:"severity"`
	Metadata       JSONB                  `json:"metadata,omitempty" db:"metadata"`
	CreatedAt      time.Time              `json:"created_at" db:"created_at"`
}

// StorageMetricRequest represents the request payload for storage metrics
type StorageMetricRequest struct {
	AgentID   uuid.UUID       `json:"agent_id"`
	CommandID string          `json:"command_id"`
	Timestamp time.Time       `json:"timestamp"`
	Metrics   []StorageMetric `json:"metrics"`
}

// StorageMetricsList represents a list of storage metrics with pagination
type StorageMetricsList struct {
	Metrics []StorageMetric `json:"metrics"`
	Total   int             `json:"total"`
	Page    int             `json:"page"`
	PerPage int             `json:"per_page"`
}