package qospolicy

type ListQoSPolicies struct {
	// List
	Data []ItemQoSPolicy `json:"data"`

	// Entry count
	EntryCount uint64 `json:"entryCount"`
}

type ItemQoSPolicy struct {
	// ID of the QoS policy
	ID uint64 `json:"id"`

	// GUID
	GUID uint64 `json:"guid"`

	// Account ID that owns the QoS policy
	AccountID uint64 `json:"account_id"`

	// Name of the QoS policy
	Name string `json:"name"`

	// Description of the QoS policy
	Description string `json:"description"`

	// Status of the QoS policy
	Status string `json:"status"`

	// List of rules
	Rules Rules `json:"rules"`
}

type RecordQoSPolicy struct {
	// ID of the QoS policy
	ID uint64 `json:"id"`

	// GUID
	GUID uint64 `json:"guid"`

	// Account ID that owns the QoS policy
	AccountID uint64 `json:"account_id"`

	// Name of the QoS policy
	Name string `json:"name"`

	// Description of the QoS policy
	Description string `json:"description"`

	// Status of the QoS policy
	Status string `json:"status"`

	// List of rules
	Rules Rules `json:"rules"`
}

type Rules []Rule

type Rule struct {
	// ID of the rule
	ID uint64 `json:"id"`

	// Description of the rule
	Description string `json:"description"`

	// Rule priority in OVS (higher number = higher priority)
	Priority uint64 `json:"priority"`

	// Traffic direction
	Direction string `json:"direction"`

	// IP protocol
	Protocol string `json:"protocol"`

	// Priority Code Point (0-7). L2 marking
	PCPTag *uint64 `json:"pcp_tag"`

	// DSCP value (0-63). L3 marking
	DSCPValue *uint64 `json:"dscp_value"`

	// Source IP address
	SrcIP string `json:"src_ip"`

	// Destination IP address
	DstIP string `json:"dst_ip"`

	// Source MAC address
	SrcMAC string `json:"src_mac"`

	// Destination MAC address
	DstMAC string `json:"dst_mac"`

	// Source port
	SrcPort uint64 `json:"src_port"`

	// Destination port
	DstPort uint64 `json:"dst_port"`
}
