// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.ai.personalizer.models;

import com.azure.core.annotation.Fluent;
import com.azure.core.util.BinaryData;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** A slot with it's associated features and list of excluded actions. */
@Fluent
public final class PersonalizerSlotOptions {
    /*
     * Slot ID
     */
    @JsonProperty(value = "id", required = true)
    private String id;

    /*
     * List of dictionaries containing slot features.
     */
    @JsonProperty(value = "features")
    private List<BinaryData> features;

    /*
     * List of excluded action Ids.
     */
    @JsonProperty(value = "excludedActions")
    private List<String> excludedActions;

    /*
     * The 'baseline action' ID for the slot.
     * The BaselineAction is the Id of the Action your application would use in
     * that slot if Personalizer didn't exist.
     * BaselineAction must be defined for every slot.
     * BaselineAction should never be part of ExcludedActions.
     * Each slot must have a unique BaselineAction which corresponds to an an
     * action from the event's Actions list.
     */
    @JsonProperty(value = "baselineAction", required = true)
    private String baselineAction;

    /**
     * Get the id property: Slot ID.
     *
     * @return the id value.
     */
    public String getId() {
        return this.id;
    }

    /**
     * Set the id property: Slot ID.
     *
     * @param id the id value to set.
     * @return the PersonalizerSlotOptions object itself.
     */
    public PersonalizerSlotOptions setId(String id) {
        this.id = id;
        return this;
    }

    /**
     * Get the features property: List of dictionaries containing slot features.
     *
     * @return the features value.
     */
    public List<BinaryData> getFeatures() {
        return this.features;
    }

    /**
     * Set the features property: List of dictionaries containing slot features.
     *
     * @param features the features value to set.
     * @return the PersonalizerSlotOptions object itself.
     */
    public PersonalizerSlotOptions setFeatures(List<BinaryData> features) {
        this.features = features;
        return this;
    }

    /**
     * Get the excludedActions property: List of excluded action Ids.
     *
     * @return the excludedActions value.
     */
    public List<String> getExcludedActions() {
        return this.excludedActions;
    }

    /**
     * Set the excludedActions property: List of excluded action Ids.
     *
     * @param excludedActions the excludedActions value to set.
     * @return the PersonalizerSlotOptions object itself.
     */
    public PersonalizerSlotOptions setExcludedActions(List<String> excludedActions) {
        this.excludedActions = excludedActions;
        return this;
    }

    /**
     * Get the baselineAction property: The 'baseline action' ID for the slot. The BaselineAction is the Id of the
     * Action your application would use in that slot if Personalizer didn't exist. BaselineAction must be defined for
     * every slot. BaselineAction should never be part of ExcludedActions. Each slot must have a unique BaselineAction
     * which corresponds to an an action from the event's Actions list.
     *
     * @return the baselineAction value.
     */
    public String getBaselineAction() {
        return this.baselineAction;
    }

    /**
     * Set the baselineAction property: The 'baseline action' ID for the slot. The BaselineAction is the Id of the
     * Action your application would use in that slot if Personalizer didn't exist. BaselineAction must be defined for
     * every slot. BaselineAction should never be part of ExcludedActions. Each slot must have a unique BaselineAction
     * which corresponds to an an action from the event's Actions list.
     *
     * @param baselineAction the baselineAction value to set.
     * @return the PersonalizerSlotOptions object itself.
     */
    public PersonalizerSlotOptions setBaselineAction(String baselineAction) {
        this.baselineAction = baselineAction;
        return this;
    }
}
