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

package com.azure.resourcemanager.mobilenetwork.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;

/** Platform specific packet core control plane version properties. */
@Fluent
public final class Platform {
    /*
     * The platform type where this version can be deployed.
     */
    @JsonProperty(value = "platformType")
    private PlatformType platformType;

    /*
     * The state of this packet core control plane version on this platform.
     */
    @JsonProperty(value = "versionState")
    private VersionState versionState;

    /*
     * The minimum software version of the platform where this packet core version can be deployed.
     */
    @JsonProperty(value = "minimumPlatformSoftwareVersion")
    private String minimumPlatformSoftwareVersion;

    /*
     * The maximum software version of the platform where this packet core version can be deployed.
     */
    @JsonProperty(value = "maximumPlatformSoftwareVersion")
    private String maximumPlatformSoftwareVersion;

    /*
     * Indicates whether this is the recommended version for this platform.
     */
    @JsonProperty(value = "recommendedVersion")
    private RecommendedVersion recommendedVersion;

    /*
     * Indicates whether this version is obsoleted for this platform.
     */
    @JsonProperty(value = "obsoleteVersion")
    private ObsoleteVersion obsoleteVersion;

    /** Creates an instance of Platform class. */
    public Platform() {
    }

    /**
     * Get the platformType property: The platform type where this version can be deployed.
     *
     * @return the platformType value.
     */
    public PlatformType platformType() {
        return this.platformType;
    }

    /**
     * Set the platformType property: The platform type where this version can be deployed.
     *
     * @param platformType the platformType value to set.
     * @return the Platform object itself.
     */
    public Platform withPlatformType(PlatformType platformType) {
        this.platformType = platformType;
        return this;
    }

    /**
     * Get the versionState property: The state of this packet core control plane version on this platform.
     *
     * @return the versionState value.
     */
    public VersionState versionState() {
        return this.versionState;
    }

    /**
     * Set the versionState property: The state of this packet core control plane version on this platform.
     *
     * @param versionState the versionState value to set.
     * @return the Platform object itself.
     */
    public Platform withVersionState(VersionState versionState) {
        this.versionState = versionState;
        return this;
    }

    /**
     * Get the minimumPlatformSoftwareVersion property: The minimum software version of the platform where this packet
     * core version can be deployed.
     *
     * @return the minimumPlatformSoftwareVersion value.
     */
    public String minimumPlatformSoftwareVersion() {
        return this.minimumPlatformSoftwareVersion;
    }

    /**
     * Set the minimumPlatformSoftwareVersion property: The minimum software version of the platform where this packet
     * core version can be deployed.
     *
     * @param minimumPlatformSoftwareVersion the minimumPlatformSoftwareVersion value to set.
     * @return the Platform object itself.
     */
    public Platform withMinimumPlatformSoftwareVersion(String minimumPlatformSoftwareVersion) {
        this.minimumPlatformSoftwareVersion = minimumPlatformSoftwareVersion;
        return this;
    }

    /**
     * Get the maximumPlatformSoftwareVersion property: The maximum software version of the platform where this packet
     * core version can be deployed.
     *
     * @return the maximumPlatformSoftwareVersion value.
     */
    public String maximumPlatformSoftwareVersion() {
        return this.maximumPlatformSoftwareVersion;
    }

    /**
     * Set the maximumPlatformSoftwareVersion property: The maximum software version of the platform where this packet
     * core version can be deployed.
     *
     * @param maximumPlatformSoftwareVersion the maximumPlatformSoftwareVersion value to set.
     * @return the Platform object itself.
     */
    public Platform withMaximumPlatformSoftwareVersion(String maximumPlatformSoftwareVersion) {
        this.maximumPlatformSoftwareVersion = maximumPlatformSoftwareVersion;
        return this;
    }

    /**
     * Get the recommendedVersion property: Indicates whether this is the recommended version for this platform.
     *
     * @return the recommendedVersion value.
     */
    public RecommendedVersion recommendedVersion() {
        return this.recommendedVersion;
    }

    /**
     * Set the recommendedVersion property: Indicates whether this is the recommended version for this platform.
     *
     * @param recommendedVersion the recommendedVersion value to set.
     * @return the Platform object itself.
     */
    public Platform withRecommendedVersion(RecommendedVersion recommendedVersion) {
        this.recommendedVersion = recommendedVersion;
        return this;
    }

    /**
     * Get the obsoleteVersion property: Indicates whether this version is obsoleted for this platform.
     *
     * @return the obsoleteVersion value.
     */
    public ObsoleteVersion obsoleteVersion() {
        return this.obsoleteVersion;
    }

    /**
     * Set the obsoleteVersion property: Indicates whether this version is obsoleted for this platform.
     *
     * @param obsoleteVersion the obsoleteVersion value to set.
     * @return the Platform object itself.
     */
    public Platform withObsoleteVersion(ObsoleteVersion obsoleteVersion) {
        this.obsoleteVersion = obsoleteVersion;
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    public void validate() {
    }
}
