/**
 * 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.vision.computervision.models;

import java.util.List;

/**
 * The AnalyzeImageInStreamOptionalParameter model.
 */
public class AnalyzeImageInStreamOptionalParameter {
    /**
     * A string indicating what visual feature types to return. Multiple values
     * should be comma-separated. Valid visual feature types include:
     * Categories - categorizes image content according to a taxonomy defined
     * in documentation. Tags - tags the image with a detailed list of words
     * related to the image content. Description - describes the image content
     * with a complete English sentence. Faces - detects if faces are present.
     * If present, generate coordinates, gender and age. ImageType - detects if
     * image is clipart or a line drawing. Color - determines the accent color,
     * dominant color, and whether an image is black&amp;white. Adult - detects
     * if the image is pornographic in nature (depicts nudity or a sex act), or
     * is gory (depicts extreme violence or blood). Sexually suggestive content
     * (aka racy content) is also detected. Objects - detects various objects
     * within an image, including the approximate location. The Objects
     * argument is only available in English. Brands - detects various brands
     * within an image, including the approximate location. The Brands argument
     * is only available in English.
     */
    private List<VisualFeatureTypes> visualFeatures;

    /**
     * A string indicating which domain-specific details to return. Multiple
     * values should be comma-separated. Valid visual feature types include:
     * Celebrities - identifies celebrities if detected in the image, Landmarks
     * - identifies notable landmarks in the image.
     */
    private List<Details> details;

    /**
     * The desired language for output generation. If this parameter is not
     * specified, the default value is &amp;quot;en&amp;quot;.Supported
     * languages:en - English, Default. es - Spanish, ja - Japanese, pt -
     * Portuguese, zh - Simplified Chinese. Possible values include: 'en',
     * 'es', 'ja', 'pt', 'zh'.
     */
    private String language;

    /**
     * Turn off specified domain models when generating the description.
     */
    private List<DescriptionExclude> descriptionExclude;

    /**
     * Optional parameter to specify the version of the AI model. Accepted
     * values are: "latest", "2021-04-01". Defaults to "latest".
     */
    private String modelVersion;

    /**
     * Gets or sets the preferred language for the response.
     */
    private String thisclientacceptLanguage;

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

    /**
     * Set the visualFeatures value.
     *
     * @param visualFeatures the visualFeatures value to set
     * @return the AnalyzeImageInStreamOptionalParameter object itself.
     */
    public AnalyzeImageInStreamOptionalParameter withVisualFeatures(List<VisualFeatureTypes> visualFeatures) {
        this.visualFeatures = visualFeatures;
        return this;
    }

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

    /**
     * Set the details value.
     *
     * @param details the details value to set
     * @return the AnalyzeImageInStreamOptionalParameter object itself.
     */
    public AnalyzeImageInStreamOptionalParameter withDetails(List<Details> details) {
        this.details = details;
        return this;
    }

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

    /**
     * Set the language value.
     *
     * @param language the language value to set
     * @return the AnalyzeImageInStreamOptionalParameter object itself.
     */
    public AnalyzeImageInStreamOptionalParameter withLanguage(String language) {
        this.language = language;
        return this;
    }

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

    /**
     * Set the descriptionExclude value.
     *
     * @param descriptionExclude the descriptionExclude value to set
     * @return the AnalyzeImageInStreamOptionalParameter object itself.
     */
    public AnalyzeImageInStreamOptionalParameter withDescriptionExclude(List<DescriptionExclude> descriptionExclude) {
        this.descriptionExclude = descriptionExclude;
        return this;
    }

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

    /**
     * Set the modelVersion value.
     *
     * @param modelVersion the modelVersion value to set
     * @return the AnalyzeImageInStreamOptionalParameter object itself.
     */
    public AnalyzeImageInStreamOptionalParameter withModelVersion(String modelVersion) {
        this.modelVersion = modelVersion;
        return this;
    }

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

    /**
     * Set the thisclientacceptLanguage value.
     *
     * @param thisclientacceptLanguage the thisclientacceptLanguage value to set
     * @return the AnalyzeImageInStreamOptionalParameter object itself.
     */
    public AnalyzeImageInStreamOptionalParameter withThisclientacceptLanguage(String thisclientacceptLanguage) {
        this.thisclientacceptLanguage = thisclientacceptLanguage;
        return this;
    }

}
