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

package com.azure.resourcemanager.billing.fluent.models;

import com.azure.core.annotation.Fluent;
import com.azure.resourcemanager.billing.models.InvoiceSectionState;
import com.azure.resourcemanager.billing.models.TargetCloud;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Map;

/** The properties of an invoice section. */
@Fluent
public final class InvoiceSectionProperties {
    /*
     * The name of the invoice section.
     */
    @JsonProperty(value = "displayName")
    private String displayName;

    /*
     * Dictionary of metadata associated with the invoice section.
     */
    @JsonProperty(value = "labels")
    @JsonInclude(value = JsonInclude.Include.NON_NULL, content = JsonInclude.Include.ALWAYS)
    private Map<String, String> labels;

    /*
     * Identifies the state of an invoice section.
     */
    @JsonProperty(value = "state", access = JsonProperty.Access.WRITE_ONLY)
    private InvoiceSectionState state;

    /*
     * The system generated unique identifier for an invoice section.
     */
    @JsonProperty(value = "systemId", access = JsonProperty.Access.WRITE_ONLY)
    private String systemId;

    /*
     * Dictionary of metadata associated with the invoice section. Maximum key/value length supported of 256
     * characters. Keys/value should not empty value nor null. Keys can not contain < > % & \ ? /
     */
    @JsonProperty(value = "tags")
    @JsonInclude(value = JsonInclude.Include.NON_NULL, content = JsonInclude.Include.ALWAYS)
    private Map<String, String> tags;

    /*
     * Identifies the cloud environments that are associated with an invoice section. This is a system managed optional
     * field and gets updated as the invoice section gets associated with accounts in various clouds.
     */
    @JsonProperty(value = "targetCloud", access = JsonProperty.Access.WRITE_ONLY)
    private TargetCloud targetCloud;

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

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

    /**
     * Set the displayName property: The name of the invoice section.
     *
     * @param displayName the displayName value to set.
     * @return the InvoiceSectionProperties object itself.
     */
    public InvoiceSectionProperties withDisplayName(String displayName) {
        this.displayName = displayName;
        return this;
    }

    /**
     * Get the labels property: Dictionary of metadata associated with the invoice section.
     *
     * @return the labels value.
     */
    public Map<String, String> labels() {
        return this.labels;
    }

    /**
     * Set the labels property: Dictionary of metadata associated with the invoice section.
     *
     * @param labels the labels value to set.
     * @return the InvoiceSectionProperties object itself.
     */
    public InvoiceSectionProperties withLabels(Map<String, String> labels) {
        this.labels = labels;
        return this;
    }

    /**
     * Get the state property: Identifies the state of an invoice section.
     *
     * @return the state value.
     */
    public InvoiceSectionState state() {
        return this.state;
    }

    /**
     * Get the systemId property: The system generated unique identifier for an invoice section.
     *
     * @return the systemId value.
     */
    public String systemId() {
        return this.systemId;
    }

    /**
     * Get the tags property: Dictionary of metadata associated with the invoice section. Maximum key/value length
     * supported of 256 characters. Keys/value should not empty value nor null. Keys can not contain &lt; &gt; % &amp; \
     * ? /.
     *
     * @return the tags value.
     */
    public Map<String, String> tags() {
        return this.tags;
    }

    /**
     * Set the tags property: Dictionary of metadata associated with the invoice section. Maximum key/value length
     * supported of 256 characters. Keys/value should not empty value nor null. Keys can not contain &lt; &gt; % &amp; \
     * ? /.
     *
     * @param tags the tags value to set.
     * @return the InvoiceSectionProperties object itself.
     */
    public InvoiceSectionProperties withTags(Map<String, String> tags) {
        this.tags = tags;
        return this;
    }

    /**
     * Get the targetCloud property: Identifies the cloud environments that are associated with an invoice section. This
     * is a system managed optional field and gets updated as the invoice section gets associated with accounts in
     * various clouds.
     *
     * @return the targetCloud value.
     */
    public TargetCloud targetCloud() {
        return this.targetCloud;
    }

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