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

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

/**
 * A reference to the Azure Virtual Machines Marketplace Image and additional
 * information about the Image.
 */
public class ImageInformation {
    /**
     * The ID of the Compute Node agent SKU which the Image supports.
     */
    @JsonProperty(value = "nodeAgentSKUId", required = true)
    private String nodeAgentSKUId;

    /**
     * The reference to the Azure Virtual Machine's Marketplace Image.
     */
    @JsonProperty(value = "imageReference", required = true)
    private ImageReference imageReference;

    /**
     * The type of operating system (e.g. Windows or Linux) of the Image.
     * Possible values include: 'linux', 'windows'.
     */
    @JsonProperty(value = "osType", required = true)
    private OSType osType;

    /**
     * The capabilities or features which the Image supports.
     * Not every capability of the Image is listed. Capabilities in this list
     * are considered of special interest and are generally related to
     * integration with other features in the Azure Batch service.
     */
    @JsonProperty(value = "capabilities")
    private List<String> capabilities;

    /**
     * The time when the Azure Batch service will stop accepting create Pool
     * requests for the Image.
     */
    @JsonProperty(value = "batchSupportEndOfLife")
    private DateTime batchSupportEndOfLife;

    /**
     * Whether the Azure Batch service actively verifies that the Image is
     * compatible with the associated Compute Node agent SKU.
     * Possible values include: 'verified', 'unverified'.
     */
    @JsonProperty(value = "verificationType", required = true)
    private VerificationType verificationType;

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

    /**
     * Set the nodeAgentSKUId value.
     *
     * @param nodeAgentSKUId the nodeAgentSKUId value to set
     * @return the ImageInformation object itself.
     */
    public ImageInformation withNodeAgentSKUId(String nodeAgentSKUId) {
        this.nodeAgentSKUId = nodeAgentSKUId;
        return this;
    }

    /**
     * Get the imageReference value.
     *
     * @return the imageReference value
     */
    public ImageReference imageReference() {
        return this.imageReference;
    }

    /**
     * Set the imageReference value.
     *
     * @param imageReference the imageReference value to set
     * @return the ImageInformation object itself.
     */
    public ImageInformation withImageReference(ImageReference imageReference) {
        this.imageReference = imageReference;
        return this;
    }

    /**
     * Get possible values include: 'linux', 'windows'.
     *
     * @return the osType value
     */
    public OSType osType() {
        return this.osType;
    }

    /**
     * Set possible values include: 'linux', 'windows'.
     *
     * @param osType the osType value to set
     * @return the ImageInformation object itself.
     */
    public ImageInformation withOsType(OSType osType) {
        this.osType = osType;
        return this;
    }

    /**
     * Get not every capability of the Image is listed. Capabilities in this list are considered of special interest and are generally related to integration with other features in the Azure Batch service.
     *
     * @return the capabilities value
     */
    public List<String> capabilities() {
        return this.capabilities;
    }

    /**
     * Set not every capability of the Image is listed. Capabilities in this list are considered of special interest and are generally related to integration with other features in the Azure Batch service.
     *
     * @param capabilities the capabilities value to set
     * @return the ImageInformation object itself.
     */
    public ImageInformation withCapabilities(List<String> capabilities) {
        this.capabilities = capabilities;
        return this;
    }

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

    /**
     * Set the batchSupportEndOfLife value.
     *
     * @param batchSupportEndOfLife the batchSupportEndOfLife value to set
     * @return the ImageInformation object itself.
     */
    public ImageInformation withBatchSupportEndOfLife(DateTime batchSupportEndOfLife) {
        this.batchSupportEndOfLife = batchSupportEndOfLife;
        return this;
    }

    /**
     * Get possible values include: 'verified', 'unverified'.
     *
     * @return the verificationType value
     */
    public VerificationType verificationType() {
        return this.verificationType;
    }

    /**
     * Set possible values include: 'verified', 'unverified'.
     *
     * @param verificationType the verificationType value to set
     * @return the ImageInformation object itself.
     */
    public ImageInformation withVerificationType(VerificationType verificationType) {
        this.verificationType = verificationType;
        return this;
    }

}
