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

import org.joda.time.DateTime;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * Object model of an application version.
 */
public class VersionInfo {
    /**
     * The version ID. E.g.: "0.1".
     */
    @JsonProperty(value = "version", required = true)
    private String version;

    /**
     * The version's creation timestamp.
     */
    @JsonProperty(value = "createdDateTime")
    private DateTime createdDateTime;

    /**
     * Timestamp of the last update.
     */
    @JsonProperty(value = "lastModifiedDateTime")
    private DateTime lastModifiedDateTime;

    /**
     * Timestamp of the last time the model was trained.
     */
    @JsonProperty(value = "lastTrainedDateTime")
    private DateTime lastTrainedDateTime;

    /**
     * Timestamp when was last published.
     */
    @JsonProperty(value = "lastPublishedDateTime")
    private DateTime lastPublishedDateTime;

    /**
     * The Runtime endpoint URL for this model version.
     */
    @JsonProperty(value = "endpointUrl")
    private String endpointUrl;

    /**
     * The endpoint key.
     */
    @JsonProperty(value = "assignedEndpointKey")
    private Map<String, String> assignedEndpointKey;

    /**
     * External keys.
     */
    @JsonProperty(value = "externalApiKeys")
    private Object externalApiKeys;

    /**
     * Number of intents in this model.
     */
    @JsonProperty(value = "intentsCount")
    private Integer intentsCount;

    /**
     * Number of entities in this model.
     */
    @JsonProperty(value = "entitiesCount")
    private Integer entitiesCount;

    /**
     * Number of calls made to this endpoint.
     */
    @JsonProperty(value = "endpointHitsCount")
    private Integer endpointHitsCount;

    /**
     * The current training status. Possible values include: 'NeedsTraining',
     * 'InProgress', 'Trained'.
     */
    @JsonProperty(value = "trainingStatus", required = true)
    private TrainingStatus trainingStatus;

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

    /**
     * Set the version value.
     *
     * @param version the version value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withVersion(String version) {
        this.version = version;
        return this;
    }

    /**
     * Get the createdDateTime value.
     *
     * @return the createdDateTime value
     */
    public DateTime createdDateTime() {
        return this.createdDateTime;
    }

    /**
     * Set the createdDateTime value.
     *
     * @param createdDateTime the createdDateTime value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withCreatedDateTime(DateTime createdDateTime) {
        this.createdDateTime = createdDateTime;
        return this;
    }

    /**
     * Get the lastModifiedDateTime value.
     *
     * @return the lastModifiedDateTime value
     */
    public DateTime lastModifiedDateTime() {
        return this.lastModifiedDateTime;
    }

    /**
     * Set the lastModifiedDateTime value.
     *
     * @param lastModifiedDateTime the lastModifiedDateTime value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withLastModifiedDateTime(DateTime lastModifiedDateTime) {
        this.lastModifiedDateTime = lastModifiedDateTime;
        return this;
    }

    /**
     * Get the lastTrainedDateTime value.
     *
     * @return the lastTrainedDateTime value
     */
    public DateTime lastTrainedDateTime() {
        return this.lastTrainedDateTime;
    }

    /**
     * Set the lastTrainedDateTime value.
     *
     * @param lastTrainedDateTime the lastTrainedDateTime value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withLastTrainedDateTime(DateTime lastTrainedDateTime) {
        this.lastTrainedDateTime = lastTrainedDateTime;
        return this;
    }

    /**
     * Get the lastPublishedDateTime value.
     *
     * @return the lastPublishedDateTime value
     */
    public DateTime lastPublishedDateTime() {
        return this.lastPublishedDateTime;
    }

    /**
     * Set the lastPublishedDateTime value.
     *
     * @param lastPublishedDateTime the lastPublishedDateTime value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withLastPublishedDateTime(DateTime lastPublishedDateTime) {
        this.lastPublishedDateTime = lastPublishedDateTime;
        return this;
    }

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

    /**
     * Set the endpointUrl value.
     *
     * @param endpointUrl the endpointUrl value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withEndpointUrl(String endpointUrl) {
        this.endpointUrl = endpointUrl;
        return this;
    }

    /**
     * Get the assignedEndpointKey value.
     *
     * @return the assignedEndpointKey value
     */
    public Map<String, String> assignedEndpointKey() {
        return this.assignedEndpointKey;
    }

    /**
     * Set the assignedEndpointKey value.
     *
     * @param assignedEndpointKey the assignedEndpointKey value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withAssignedEndpointKey(Map<String, String> assignedEndpointKey) {
        this.assignedEndpointKey = assignedEndpointKey;
        return this;
    }

    /**
     * Get the externalApiKeys value.
     *
     * @return the externalApiKeys value
     */
    public Object externalApiKeys() {
        return this.externalApiKeys;
    }

    /**
     * Set the externalApiKeys value.
     *
     * @param externalApiKeys the externalApiKeys value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withExternalApiKeys(Object externalApiKeys) {
        this.externalApiKeys = externalApiKeys;
        return this;
    }

    /**
     * Get the intentsCount value.
     *
     * @return the intentsCount value
     */
    public Integer intentsCount() {
        return this.intentsCount;
    }

    /**
     * Set the intentsCount value.
     *
     * @param intentsCount the intentsCount value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withIntentsCount(Integer intentsCount) {
        this.intentsCount = intentsCount;
        return this;
    }

    /**
     * Get the entitiesCount value.
     *
     * @return the entitiesCount value
     */
    public Integer entitiesCount() {
        return this.entitiesCount;
    }

    /**
     * Set the entitiesCount value.
     *
     * @param entitiesCount the entitiesCount value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withEntitiesCount(Integer entitiesCount) {
        this.entitiesCount = entitiesCount;
        return this;
    }

    /**
     * Get the endpointHitsCount value.
     *
     * @return the endpointHitsCount value
     */
    public Integer endpointHitsCount() {
        return this.endpointHitsCount;
    }

    /**
     * Set the endpointHitsCount value.
     *
     * @param endpointHitsCount the endpointHitsCount value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withEndpointHitsCount(Integer endpointHitsCount) {
        this.endpointHitsCount = endpointHitsCount;
        return this;
    }

    /**
     * Get the trainingStatus value.
     *
     * @return the trainingStatus value
     */
    public TrainingStatus trainingStatus() {
        return this.trainingStatus;
    }

    /**
     * Set the trainingStatus value.
     *
     * @param trainingStatus the trainingStatus value to set
     * @return the VersionInfo object itself.
     */
    public VersionInfo withTrainingStatus(TrainingStatus trainingStatus) {
        this.trainingStatus = trainingStatus;
        return this;
    }

}
