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

package com.azure.resourcemanager.devtestlabs.models;

import com.azure.resourcemanager.devtestlabs.fluent.models.LabVirtualMachinePropertiesInner;
import java.time.OffsetDateTime;
import java.util.List;

/** An immutable client-side representation of LabVirtualMachineProperties. */
public interface LabVirtualMachineProperties {
    /**
     * Gets the notes property: The notes of the virtual machine.
     *
     * @return the notes value.
     */
    String notes();

    /**
     * Gets the ownerObjectId property: The object identifier of the owner of the virtual machine.
     *
     * @return the ownerObjectId value.
     */
    String ownerObjectId();

    /**
     * Gets the ownerUserPrincipalName property: The user principal name of the virtual machine owner.
     *
     * @return the ownerUserPrincipalName value.
     */
    String ownerUserPrincipalName();

    /**
     * Gets the createdByUserId property: The object identifier of the creator of the virtual machine.
     *
     * @return the createdByUserId value.
     */
    String createdByUserId();

    /**
     * Gets the createdByUser property: The email address of creator of the virtual machine.
     *
     * @return the createdByUser value.
     */
    String createdByUser();

    /**
     * Gets the createdDate property: The creation date of the virtual machine.
     *
     * @return the createdDate value.
     */
    OffsetDateTime createdDate();

    /**
     * Gets the computeId property: The resource identifier (Microsoft.Compute) of the virtual machine.
     *
     * @return the computeId value.
     */
    String computeId();

    /**
     * Gets the customImageId property: The custom image identifier of the virtual machine.
     *
     * @return the customImageId value.
     */
    String customImageId();

    /**
     * Gets the osType property: The OS type of the virtual machine.
     *
     * @return the osType value.
     */
    String osType();

    /**
     * Gets the size property: The size of the virtual machine.
     *
     * @return the size value.
     */
    String size();

    /**
     * Gets the username property: The user name of the virtual machine.
     *
     * @return the username value.
     */
    String username();

    /**
     * Gets the password property: The password of the virtual machine administrator.
     *
     * @return the password value.
     */
    String password();

    /**
     * Gets the sshKey property: The SSH key of the virtual machine administrator.
     *
     * @return the sshKey value.
     */
    String sshKey();

    /**
     * Gets the isAuthenticationWithSshKey property: Indicates whether this virtual machine uses an SSH key for
     * authentication.
     *
     * @return the isAuthenticationWithSshKey value.
     */
    Boolean isAuthenticationWithSshKey();

    /**
     * Gets the fqdn property: The fully-qualified domain name of the virtual machine.
     *
     * @return the fqdn value.
     */
    String fqdn();

    /**
     * Gets the labSubnetName property: The lab subnet name of the virtual machine.
     *
     * @return the labSubnetName value.
     */
    String labSubnetName();

    /**
     * Gets the labVirtualNetworkId property: The lab virtual network identifier of the virtual machine.
     *
     * @return the labVirtualNetworkId value.
     */
    String labVirtualNetworkId();

    /**
     * Gets the disallowPublicIpAddress property: Indicates whether the virtual machine is to be created without a
     * public IP address.
     *
     * @return the disallowPublicIpAddress value.
     */
    Boolean disallowPublicIpAddress();

    /**
     * Gets the artifacts property: The artifacts to be installed on the virtual machine.
     *
     * @return the artifacts value.
     */
    List<ArtifactInstallProperties> artifacts();

    /**
     * Gets the artifactDeploymentStatus property: The artifact deployment status for the virtual machine.
     *
     * @return the artifactDeploymentStatus value.
     */
    ArtifactDeploymentStatusProperties artifactDeploymentStatus();

    /**
     * Gets the galleryImageReference property: The Microsoft Azure Marketplace image reference of the virtual machine.
     *
     * @return the galleryImageReference value.
     */
    GalleryImageReference galleryImageReference();

    /**
     * Gets the planId property: The id of the plan associated with the virtual machine image.
     *
     * @return the planId value.
     */
    String planId();

    /**
     * Gets the computeVm property: The compute virtual machine properties.
     *
     * @return the computeVm value.
     */
    ComputeVmProperties computeVm();

    /**
     * Gets the networkInterface property: The network interface properties.
     *
     * @return the networkInterface value.
     */
    NetworkInterfaceProperties networkInterface();

    /**
     * Gets the applicableSchedule property: The applicable schedule for the virtual machine.
     *
     * @return the applicableSchedule value.
     */
    ApplicableSchedule applicableSchedule();

    /**
     * Gets the expirationDate property: The expiration date for VM.
     *
     * @return the expirationDate value.
     */
    OffsetDateTime expirationDate();

    /**
     * Gets the allowClaim property: Indicates whether another user can take ownership of the virtual machine.
     *
     * @return the allowClaim value.
     */
    Boolean allowClaim();

    /**
     * Gets the storageType property: Storage type to use for virtual machine (i.e. Standard, Premium).
     *
     * @return the storageType value.
     */
    String storageType();

    /**
     * Gets the virtualMachineCreationSource property: Tells source of creation of lab virtual machine. Output property
     * only.
     *
     * @return the virtualMachineCreationSource value.
     */
    VirtualMachineCreationSource virtualMachineCreationSource();

    /**
     * Gets the environmentId property: The resource ID of the environment that contains this virtual machine, if any.
     *
     * @return the environmentId value.
     */
    String environmentId();

    /**
     * Gets the dataDiskParameters property: New or existing data disks to attach to the virtual machine after creation.
     *
     * @return the dataDiskParameters value.
     */
    List<DataDiskProperties> dataDiskParameters();

    /**
     * Gets the scheduleParameters property: Virtual Machine schedules to be created.
     *
     * @return the scheduleParameters value.
     */
    List<ScheduleCreationParameter> scheduleParameters();

    /**
     * Gets the lastKnownPowerState property: Last known compute power state captured in DTL.
     *
     * @return the lastKnownPowerState value.
     */
    String lastKnownPowerState();

    /**
     * Gets the provisioningState property: The provisioning status of the resource.
     *
     * @return the provisioningState value.
     */
    String provisioningState();

    /**
     * Gets the uniqueIdentifier property: The unique immutable identifier of a resource (Guid).
     *
     * @return the uniqueIdentifier value.
     */
    String uniqueIdentifier();

    /**
     * Gets the inner com.azure.resourcemanager.devtestlabs.fluent.models.LabVirtualMachinePropertiesInner object.
     *
     * @return the inner object.
     */
    LabVirtualMachinePropertiesInner innerModel();
}
