// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.azure.cdn.inputs;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class EndpointDeliveryRuleRequestHeaderConditionArgs extends com.pulumi.resources.ResourceArgs {

    public static final EndpointDeliveryRuleRequestHeaderConditionArgs Empty = new EndpointDeliveryRuleRequestHeaderConditionArgs();

    /**
     * List of header values. This is required if `operator` is not `Any`.
     * 
     */
    @Import(name="matchValues")
    private @Nullable Output<List<String>> matchValues;

    /**
     * @return List of header values. This is required if `operator` is not `Any`.
     * 
     */
    public Optional<Output<List<String>>> matchValues() {
        return Optional.ofNullable(this.matchValues);
    }

    /**
     * Defaults to `false`.
     * 
     */
    @Import(name="negateCondition")
    private @Nullable Output<Boolean> negateCondition;

    /**
     * @return Defaults to `false`.
     * 
     */
    public Optional<Output<Boolean>> negateCondition() {
        return Optional.ofNullable(this.negateCondition);
    }

    /**
     * Valid values are `Any`, `BeginsWith`, `Contains`, `EndsWith`, `Equal`, `GreaterThan`, `GreaterThanOrEqual`, `LessThan` and `LessThanOrEqual`.
     * 
     */
    @Import(name="operator", required=true)
    private Output<String> operator;

    /**
     * @return Valid values are `Any`, `BeginsWith`, `Contains`, `EndsWith`, `Equal`, `GreaterThan`, `GreaterThanOrEqual`, `LessThan` and `LessThanOrEqual`.
     * 
     */
    public Output<String> operator() {
        return this.operator;
    }

    /**
     * Header name.
     * 
     */
    @Import(name="selector", required=true)
    private Output<String> selector;

    /**
     * @return Header name.
     * 
     */
    public Output<String> selector() {
        return this.selector;
    }

    /**
     * A list of transforms. Valid values are `Lowercase` and `Uppercase`.
     * 
     */
    @Import(name="transforms")
    private @Nullable Output<List<String>> transforms;

    /**
     * @return A list of transforms. Valid values are `Lowercase` and `Uppercase`.
     * 
     */
    public Optional<Output<List<String>>> transforms() {
        return Optional.ofNullable(this.transforms);
    }

    private EndpointDeliveryRuleRequestHeaderConditionArgs() {}

    private EndpointDeliveryRuleRequestHeaderConditionArgs(EndpointDeliveryRuleRequestHeaderConditionArgs $) {
        this.matchValues = $.matchValues;
        this.negateCondition = $.negateCondition;
        this.operator = $.operator;
        this.selector = $.selector;
        this.transforms = $.transforms;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(EndpointDeliveryRuleRequestHeaderConditionArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private EndpointDeliveryRuleRequestHeaderConditionArgs $;

        public Builder() {
            $ = new EndpointDeliveryRuleRequestHeaderConditionArgs();
        }

        public Builder(EndpointDeliveryRuleRequestHeaderConditionArgs defaults) {
            $ = new EndpointDeliveryRuleRequestHeaderConditionArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param matchValues List of header values. This is required if `operator` is not `Any`.
         * 
         * @return builder
         * 
         */
        public Builder matchValues(@Nullable Output<List<String>> matchValues) {
            $.matchValues = matchValues;
            return this;
        }

        /**
         * @param matchValues List of header values. This is required if `operator` is not `Any`.
         * 
         * @return builder
         * 
         */
        public Builder matchValues(List<String> matchValues) {
            return matchValues(Output.of(matchValues));
        }

        /**
         * @param matchValues List of header values. This is required if `operator` is not `Any`.
         * 
         * @return builder
         * 
         */
        public Builder matchValues(String... matchValues) {
            return matchValues(List.of(matchValues));
        }

        /**
         * @param negateCondition Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder negateCondition(@Nullable Output<Boolean> negateCondition) {
            $.negateCondition = negateCondition;
            return this;
        }

        /**
         * @param negateCondition Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder negateCondition(Boolean negateCondition) {
            return negateCondition(Output.of(negateCondition));
        }

        /**
         * @param operator Valid values are `Any`, `BeginsWith`, `Contains`, `EndsWith`, `Equal`, `GreaterThan`, `GreaterThanOrEqual`, `LessThan` and `LessThanOrEqual`.
         * 
         * @return builder
         * 
         */
        public Builder operator(Output<String> operator) {
            $.operator = operator;
            return this;
        }

        /**
         * @param operator Valid values are `Any`, `BeginsWith`, `Contains`, `EndsWith`, `Equal`, `GreaterThan`, `GreaterThanOrEqual`, `LessThan` and `LessThanOrEqual`.
         * 
         * @return builder
         * 
         */
        public Builder operator(String operator) {
            return operator(Output.of(operator));
        }

        /**
         * @param selector Header name.
         * 
         * @return builder
         * 
         */
        public Builder selector(Output<String> selector) {
            $.selector = selector;
            return this;
        }

        /**
         * @param selector Header name.
         * 
         * @return builder
         * 
         */
        public Builder selector(String selector) {
            return selector(Output.of(selector));
        }

        /**
         * @param transforms A list of transforms. Valid values are `Lowercase` and `Uppercase`.
         * 
         * @return builder
         * 
         */
        public Builder transforms(@Nullable Output<List<String>> transforms) {
            $.transforms = transforms;
            return this;
        }

        /**
         * @param transforms A list of transforms. Valid values are `Lowercase` and `Uppercase`.
         * 
         * @return builder
         * 
         */
        public Builder transforms(List<String> transforms) {
            return transforms(Output.of(transforms));
        }

        /**
         * @param transforms A list of transforms. Valid values are `Lowercase` and `Uppercase`.
         * 
         * @return builder
         * 
         */
        public Builder transforms(String... transforms) {
            return transforms(List.of(transforms));
        }

        public EndpointDeliveryRuleRequestHeaderConditionArgs build() {
            $.operator = Objects.requireNonNull($.operator, "expected parameter 'operator' to be non-null");
            $.selector = Objects.requireNonNull($.selector, "expected parameter 'selector' to be non-null");
            return $;
        }
    }

}
