// 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.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;

/** The properties of a resource cost item. */
@Fluent
public final class LabResourceCostProperties {
    /*
     * The name of the resource.
     */
    @JsonProperty(value = "resourcename")
    private String resourcename;

    /*
     * The unique identifier of the resource.
     */
    @JsonProperty(value = "resourceUId")
    private String resourceUId;

    /*
     * The cost component of the resource cost item.
     */
    @JsonProperty(value = "resourceCost")
    private Double resourceCost;

    /*
     * The logical resource type (ex. virtualmachine, storageaccount)
     */
    @JsonProperty(value = "resourceType")
    private String resourceType;

    /*
     * The owner of the resource (ex. janedoe@microsoft.com)
     */
    @JsonProperty(value = "resourceOwner")
    private String resourceOwner;

    /*
     * The category of the resource (ex. Premium_LRS, Standard_DS1)
     */
    @JsonProperty(value = "resourcePricingTier")
    private String resourcePricingTier;

    /*
     * The status of the resource (ex. Active)
     */
    @JsonProperty(value = "resourceStatus")
    private String resourceStatus;

    /*
     * The ID of the resource
     */
    @JsonProperty(value = "resourceId")
    private String resourceId;

    /*
     * The ID of the external resource
     */
    @JsonProperty(value = "externalResourceId")
    private String externalResourceId;

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

    /**
     * Get the resourcename property: The name of the resource.
     *
     * @return the resourcename value.
     */
    public String resourcename() {
        return this.resourcename;
    }

    /**
     * Set the resourcename property: The name of the resource.
     *
     * @param resourcename the resourcename value to set.
     * @return the LabResourceCostProperties object itself.
     */
    public LabResourceCostProperties withResourcename(String resourcename) {
        this.resourcename = resourcename;
        return this;
    }

    /**
     * Get the resourceUId property: The unique identifier of the resource.
     *
     * @return the resourceUId value.
     */
    public String resourceUId() {
        return this.resourceUId;
    }

    /**
     * Set the resourceUId property: The unique identifier of the resource.
     *
     * @param resourceUId the resourceUId value to set.
     * @return the LabResourceCostProperties object itself.
     */
    public LabResourceCostProperties withResourceUId(String resourceUId) {
        this.resourceUId = resourceUId;
        return this;
    }

    /**
     * Get the resourceCost property: The cost component of the resource cost item.
     *
     * @return the resourceCost value.
     */
    public Double resourceCost() {
        return this.resourceCost;
    }

    /**
     * Set the resourceCost property: The cost component of the resource cost item.
     *
     * @param resourceCost the resourceCost value to set.
     * @return the LabResourceCostProperties object itself.
     */
    public LabResourceCostProperties withResourceCost(Double resourceCost) {
        this.resourceCost = resourceCost;
        return this;
    }

    /**
     * Get the resourceType property: The logical resource type (ex. virtualmachine, storageaccount).
     *
     * @return the resourceType value.
     */
    public String resourceType() {
        return this.resourceType;
    }

    /**
     * Set the resourceType property: The logical resource type (ex. virtualmachine, storageaccount).
     *
     * @param resourceType the resourceType value to set.
     * @return the LabResourceCostProperties object itself.
     */
    public LabResourceCostProperties withResourceType(String resourceType) {
        this.resourceType = resourceType;
        return this;
    }

    /**
     * Get the resourceOwner property: The owner of the resource (ex. janedoe@microsoft.com).
     *
     * @return the resourceOwner value.
     */
    public String resourceOwner() {
        return this.resourceOwner;
    }

    /**
     * Set the resourceOwner property: The owner of the resource (ex. janedoe@microsoft.com).
     *
     * @param resourceOwner the resourceOwner value to set.
     * @return the LabResourceCostProperties object itself.
     */
    public LabResourceCostProperties withResourceOwner(String resourceOwner) {
        this.resourceOwner = resourceOwner;
        return this;
    }

    /**
     * Get the resourcePricingTier property: The category of the resource (ex. Premium_LRS, Standard_DS1).
     *
     * @return the resourcePricingTier value.
     */
    public String resourcePricingTier() {
        return this.resourcePricingTier;
    }

    /**
     * Set the resourcePricingTier property: The category of the resource (ex. Premium_LRS, Standard_DS1).
     *
     * @param resourcePricingTier the resourcePricingTier value to set.
     * @return the LabResourceCostProperties object itself.
     */
    public LabResourceCostProperties withResourcePricingTier(String resourcePricingTier) {
        this.resourcePricingTier = resourcePricingTier;
        return this;
    }

    /**
     * Get the resourceStatus property: The status of the resource (ex. Active).
     *
     * @return the resourceStatus value.
     */
    public String resourceStatus() {
        return this.resourceStatus;
    }

    /**
     * Set the resourceStatus property: The status of the resource (ex. Active).
     *
     * @param resourceStatus the resourceStatus value to set.
     * @return the LabResourceCostProperties object itself.
     */
    public LabResourceCostProperties withResourceStatus(String resourceStatus) {
        this.resourceStatus = resourceStatus;
        return this;
    }

    /**
     * Get the resourceId property: The ID of the resource.
     *
     * @return the resourceId value.
     */
    public String resourceId() {
        return this.resourceId;
    }

    /**
     * Set the resourceId property: The ID of the resource.
     *
     * @param resourceId the resourceId value to set.
     * @return the LabResourceCostProperties object itself.
     */
    public LabResourceCostProperties withResourceId(String resourceId) {
        this.resourceId = resourceId;
        return this;
    }

    /**
     * Get the externalResourceId property: The ID of the external resource.
     *
     * @return the externalResourceId value.
     */
    public String externalResourceId() {
        return this.externalResourceId;
    }

    /**
     * Set the externalResourceId property: The ID of the external resource.
     *
     * @param externalResourceId the externalResourceId value to set.
     * @return the LabResourceCostProperties object itself.
     */
    public LabResourceCostProperties withExternalResourceId(String externalResourceId) {
        this.externalResourceId = externalResourceId;
        return this;
    }

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