// Copyright 2016 Istio Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// This package defines the Mixer API that the sidecar proxy uses to perform
// precondition checks, manage quotas, and report telemetry.
package v1

import (
	"google.golang.org/genproto/googleapis/rpc/status"
	"time"
)

// Used to get a thumbs-up/thumbs-down before performing an action.
CheckRequest :: {
	// parameters for a quota allocation
	QuotaParams :: {
		// Amount of quota to allocate
		amount?: int64 @protobuf(1)

		// When true, supports returning less quota than what was requested.
		bestEffort?: bool @protobuf(2,name=best_effort)
	}

	// The attributes to use for this request.
	//
	// Mixer's configuration determines how these attributes are used to
	// establish the result returned in the response.
	attributes?: CompressedAttributes @protobuf(1,"(gogoproto.nullable)=false")

	// The number of words in the global dictionary, used with to populate the attributes.
	// This value is used as a quick way to determine whether the client is using a dictionary that
	// the server understands.
	globalWordCount?: uint32 @protobuf(2,name=global_word_count)

	// Used for deduplicating `Check` calls in the case of failed RPCs and retries. This should be a UUID
	// per call, where the same UUID is used for retries of the same call.
	deduplicationId?: string @protobuf(3,name=deduplication_id)

	// The individual quotas to allocate
	quotas?: {
		[string]: QuotaParams
	} @protobuf(4,type=map<string,QuotaParams>,"(gogoproto.nullable)=false")
}

// The response generated by the Check method.
CheckResponse :: {
	// Expresses the result of a precondition check.
	PreconditionResult :: {
		// A status code of OK indicates all preconditions were satisfied. Any other code indicates not
		// all preconditions were satisfied and details describe why.
		status?: _status_.Status @protobuf(1,type=google.rpc.Status,"(gogoproto.nullable)=false")

		// The amount of time for which this result can be considered valid.
		validDuration?: time.Duration @protobuf(2,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")

		// The number of uses for which this result can be considered valid.
		validUseCount?: int32 @protobuf(3,name=valid_use_count)

		// The total set of attributes that were used in producing the result
		// along with matching conditions.
		referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes)

		// An optional routing directive, used to manipulate the traffic metadata
		// whenever all preconditions are satisfied.
		routeDirective?: RouteDirective @protobuf(6,name=route_directive)
	}

	// Expresses the result of a quota allocation.
	QuotaResult :: {
		// The amount of time for which this result can be considered valid.
		validDuration?: time.Duration @protobuf(1,type=google.protobuf.Duration,name=valid_duration,"(gogoproto.nullable)=false","(gogoproto.stdduration)")

		// The amount of granted quota. When `QuotaParams.best_effort` is true, this will be >= 0.
		// If `QuotaParams.best_effort` is false, this will be either 0 or >= `QuotaParams.amount`.
		grantedAmount?: int64 @protobuf(2,name=granted_amount)

		// The total set of attributes that were used in producing the result
		// along with matching conditions.
		referencedAttributes?: ReferencedAttributes @protobuf(5,name=referenced_attributes,"(gogoproto.nullable)=false")
	}

	// The precondition check results.
	precondition?: PreconditionResult @protobuf(2,"(gogoproto.nullable)=false")

	// The resulting quota, one entry per requested quota.
	quotas?: {
		[string]: QuotaResult
	} @protobuf(3,type=map<string,QuotaResult>,"(gogoproto.nullable)=false")
}
let _status_ = status

// Describes the attributes that were used to determine the response.
// This can be used to construct a response cache.
ReferencedAttributes :: {
	// How an attribute's value was matched
	Condition :: "CONDITION_UNSPECIFIED" | // should not occur
		"ABSENCE" | // match when attribute doesn't exist
		"EXACT" | // match when attribute value is an exact byte-for-byte match
		"REGEX" // match when attribute value matches the included regex

	Condition_value :: {
		"CONDITION_UNSPECIFIED": 0
		"ABSENCE":               1
		"EXACT":                 2
		"REGEX":                 3
	}

	// Describes a single attribute match.
	AttributeMatch :: {
		// The name of the attribute. This is a dictionary index encoded in a manner identical
		// to all strings in the [CompressedAttributes][istio.mixer.v1.CompressedAttributes] message.
		name?: int32 @protobuf(1,type=sint32)

		// The kind of match against the attribute value.
		condition?: Condition @protobuf(2)

		// If a REGEX condition is provided for a STRING_MAP attribute,
		// clients should use the regex value to match against map keys.
		regex?: string @protobuf(3)

		// A key in a STRING_MAP. When multiple keys from a STRING_MAP
		// attribute were referenced, there will be multiple AttributeMatch
		// messages with different map_key values. Values for map_key SHOULD
		// be ignored for attributes that are not STRING_MAP.
		//
		// Indices for the keys are used (taken either from the
		// message dictionary from the `words` field or the global dictionary).
		//
		// If no map_key value is provided for a STRING_MAP attribute, the
		// entire STRING_MAP will be used.
		mapKey?: int32 @protobuf(4,type=sint32,name=map_key)
	}

	// The message-level dictionary. Refer to [CompressedAttributes][istio.mixer.v1.CompressedAttributes] for information
	// on using dictionaries.
	words?: [...string] @protobuf(1)

	// Describes a set of attributes.
	attributeMatches?: [...AttributeMatch] @protobuf(2,name=attribute_matches,"(gogoproto.nullable)=false")
}

// Operation on HTTP headers to replace, append, or remove a header. Header
// names are normalized to lower-case with dashes, e.g.  "x-request-id".
// Pseudo-headers ":path", ":authority", and ":method" are supported to modify
// the request headers.
HeaderOperation :: {
	// Operation type.
	Operation :: "REPLACE" | // replaces the header with the given name
		"REMOVE" | // removes the header with the given name (the value is ignored)
		"APPEND" // appends the value to the header value, or sets it if not present

	Operation_value :: {
		"REPLACE": 0
		"REMOVE":  1
		"APPEND":  2
	}

	// Header name.
	name?: string @protobuf(1)

	// Header value.
	value?: string @protobuf(2)

	// Header operation.
	operation?: Operation @protobuf(3)
}

// Expresses the routing manipulation actions to be performed on behalf of
// Mixer in response to a precondition check.
RouteDirective :: {
	// Operations on the request headers.
	requestHeaderOperations?: [...HeaderOperation] @protobuf(1,name=request_header_operations,"(gogoproto.nullable)=false")

	// Operations on the response headers.
	responseHeaderOperations?: [...HeaderOperation] @protobuf(2,name=response_header_operations,"(gogoproto.nullable)=false")

	// If set, enables a direct response without proxying the request to the routing
	// destination. Required to be a value in the 2xx or 3xx range.
	directResponseCode?: uint32 @protobuf(3,name=direct_response_code)

	// Supplies the response body for the direct response.
	// If this setting is omitted, no body is included in the generated response.
	directResponseBody?: string @protobuf(4,name=direct_response_body)
}

// Used to report telemetry after performing one or more actions.
ReportRequest :: {

	// next value: 5

	// Used to signal how the sets of compressed attributes should be reconstitued server-side.
	RepeatedAttributesSemantics ::
		// Use delta encoding between sets of compressed attributes to reduce the overall on-wire
		// request size. Each individual set of attributes is used to modify the previous set.
		// NOTE: There is no way with this encoding to specify attribute value deletion. This
		// option should be used with extreme caution.
		"DELTA_ENCODING" |

		// Treat each set of compressed attributes as complete - independent from other sets
		// in this request. This will result in on-wire duplication of attributes and values, but
		// will allow for proper accounting of absent values in overall encoding.
		"INDEPENDENT_ENCODING"

	RepeatedAttributesSemantics_value :: {
		"DELTA_ENCODING":       0
		"INDEPENDENT_ENCODING": 1
	}

	// The attributes to use for this request.
	//
	// Each `Attributes` element represents the state of a single action. Multiple actions
	// can be provided in a single message in order to improve communication efficiency. The
	// client can accumulate a set of actions and send them all in one single message.
	attributes?: [...CompressedAttributes] @protobuf(1,"(gogoproto.nullable)=false")

	// Indicates how to decode the attributes sets in this request.
	repeatedAttributesSemantics?: RepeatedAttributesSemantics @protobuf(4,name=repeated_attributes_semantics)

	// The default message-level dictionary for all the attributes.
	// Individual attribute messages can have their own dictionaries, but if they don't
	// then this set of words, if it is provided, is used instead.
	//
	// This makes it possible to share the same dictionary for all attributes in this
	// request, which can substantially reduce the overall request size.
	defaultWords?: [...string] @protobuf(2,name=default_words)

	// The number of words in the global dictionary.
	// To detect global dictionary out of sync between client and server.
	globalWordCount?: uint32 @protobuf(3,name=global_word_count)
}

// Used to carry responses to telemetry reports
ReportResponse :: {
}
