/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 */

package com.microsoft.azure.cognitiveservices.language.luis.runtime.models;

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * Prediction, based on the input query, containing intent(s) and entities.
 */
public class LuisResult {
    /**
     * The input utterance that was analized.
     */
    @JsonProperty(value = "query")
    private String query;

    /**
     * The corrected utterance (when spell checking was enabled).
     */
    @JsonProperty(value = "alteredQuery")
    private String alteredQuery;

    /**
     * The topScoringIntent property.
     */
    @JsonProperty(value = "topScoringIntent")
    private IntentModel topScoringIntent;

    /**
     * All the intents (and their score) that were detected from utterance.
     */
    @JsonProperty(value = "intents")
    private List<IntentModel> intents;

    /**
     * The entities extracted from the utterance.
     */
    @JsonProperty(value = "entities")
    private List<EntityModel> entities;

    /**
     * The composite entities extracted from the utterance.
     */
    @JsonProperty(value = "compositeEntities")
    private List<CompositeEntityModel> compositeEntities;

    /**
     * The sentimentAnalysis property.
     */
    @JsonProperty(value = "sentimentAnalysis")
    private Sentiment sentimentAnalysis;

    /**
     * Get the query value.
     *
     * @return the query value
     */
    public String query() {
        return this.query;
    }

    /**
     * Set the query value.
     *
     * @param query the query value to set
     * @return the LuisResult object itself.
     */
    public LuisResult withQuery(String query) {
        this.query = query;
        return this;
    }

    /**
     * Get the alteredQuery value.
     *
     * @return the alteredQuery value
     */
    public String alteredQuery() {
        return this.alteredQuery;
    }

    /**
     * Set the alteredQuery value.
     *
     * @param alteredQuery the alteredQuery value to set
     * @return the LuisResult object itself.
     */
    public LuisResult withAlteredQuery(String alteredQuery) {
        this.alteredQuery = alteredQuery;
        return this;
    }

    /**
     * Get the topScoringIntent value.
     *
     * @return the topScoringIntent value
     */
    public IntentModel topScoringIntent() {
        return this.topScoringIntent;
    }

    /**
     * Set the topScoringIntent value.
     *
     * @param topScoringIntent the topScoringIntent value to set
     * @return the LuisResult object itself.
     */
    public LuisResult withTopScoringIntent(IntentModel topScoringIntent) {
        this.topScoringIntent = topScoringIntent;
        return this;
    }

    /**
     * Get the intents value.
     *
     * @return the intents value
     */
    public List<IntentModel> intents() {
        return this.intents;
    }

    /**
     * Set the intents value.
     *
     * @param intents the intents value to set
     * @return the LuisResult object itself.
     */
    public LuisResult withIntents(List<IntentModel> intents) {
        this.intents = intents;
        return this;
    }

    /**
     * Get the entities value.
     *
     * @return the entities value
     */
    public List<EntityModel> entities() {
        return this.entities;
    }

    /**
     * Set the entities value.
     *
     * @param entities the entities value to set
     * @return the LuisResult object itself.
     */
    public LuisResult withEntities(List<EntityModel> entities) {
        this.entities = entities;
        return this;
    }

    /**
     * Get the compositeEntities value.
     *
     * @return the compositeEntities value
     */
    public List<CompositeEntityModel> compositeEntities() {
        return this.compositeEntities;
    }

    /**
     * Set the compositeEntities value.
     *
     * @param compositeEntities the compositeEntities value to set
     * @return the LuisResult object itself.
     */
    public LuisResult withCompositeEntities(List<CompositeEntityModel> compositeEntities) {
        this.compositeEntities = compositeEntities;
        return this;
    }

    /**
     * Get the sentimentAnalysis value.
     *
     * @return the sentimentAnalysis value
     */
    public Sentiment sentimentAnalysis() {
        return this.sentimentAnalysis;
    }

    /**
     * Set the sentimentAnalysis value.
     *
     * @param sentimentAnalysis the sentimentAnalysis value to set
     * @return the LuisResult object itself.
     */
    public LuisResult withSentimentAnalysis(Sentiment sentimentAnalysis) {
        this.sentimentAnalysis = sentimentAnalysis;
        return this;
    }

}
