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

package com.azure.resourcemanager.confidentialledger.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/**
 * ManagedCCFProperties
 *
 * <p>Additional Managed CCF properties.
 */
@Fluent
public final class ManagedCcfProperties {
    /*
     * Unique name for the Managed CCF.
     */
    @JsonProperty(value = "appName", access = JsonProperty.Access.WRITE_ONLY)
    private String appName;

    /*
     * Endpoint for calling Managed CCF Service.
     */
    @JsonProperty(value = "appUri", access = JsonProperty.Access.WRITE_ONLY)
    private String appUri;

    /*
     * Endpoint for accessing network identity.
     */
    @JsonProperty(value = "identityServiceUri", access = JsonProperty.Access.WRITE_ONLY)
    private String identityServiceUri;

    /*
     * List of member identity certificates for  Managed CCF
     */
    @JsonProperty(value = "memberIdentityCertificates")
    private List<MemberIdentityCertificate> memberIdentityCertificates;

    /*
     * DeploymentType
     *
     * Deployment Type of Managed CCF
     */
    @JsonProperty(value = "deploymentType")
    private DeploymentType deploymentType;

    /*
     * Provisioning state of Ledger Resource
     */
    @JsonProperty(value = "provisioningState", access = JsonProperty.Access.WRITE_ONLY)
    private ProvisioningState provisioningState;

    /*
     * NodeCount
     *
     * Number of CCF nodes in the Managed CCF.
     */
    @JsonProperty(value = "nodeCount")
    private Integer nodeCount;

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

    /**
     * Get the appName property: Unique name for the Managed CCF.
     *
     * @return the appName value.
     */
    public String appName() {
        return this.appName;
    }

    /**
     * Get the appUri property: Endpoint for calling Managed CCF Service.
     *
     * @return the appUri value.
     */
    public String appUri() {
        return this.appUri;
    }

    /**
     * Get the identityServiceUri property: Endpoint for accessing network identity.
     *
     * @return the identityServiceUri value.
     */
    public String identityServiceUri() {
        return this.identityServiceUri;
    }

    /**
     * Get the memberIdentityCertificates property: List of member identity certificates for Managed CCF.
     *
     * @return the memberIdentityCertificates value.
     */
    public List<MemberIdentityCertificate> memberIdentityCertificates() {
        return this.memberIdentityCertificates;
    }

    /**
     * Set the memberIdentityCertificates property: List of member identity certificates for Managed CCF.
     *
     * @param memberIdentityCertificates the memberIdentityCertificates value to set.
     * @return the ManagedCcfProperties object itself.
     */
    public ManagedCcfProperties withMemberIdentityCertificates(
        List<MemberIdentityCertificate> memberIdentityCertificates) {
        this.memberIdentityCertificates = memberIdentityCertificates;
        return this;
    }

    /**
     * Get the deploymentType property: DeploymentType
     *
     * <p>Deployment Type of Managed CCF.
     *
     * @return the deploymentType value.
     */
    public DeploymentType deploymentType() {
        return this.deploymentType;
    }

    /**
     * Set the deploymentType property: DeploymentType
     *
     * <p>Deployment Type of Managed CCF.
     *
     * @param deploymentType the deploymentType value to set.
     * @return the ManagedCcfProperties object itself.
     */
    public ManagedCcfProperties withDeploymentType(DeploymentType deploymentType) {
        this.deploymentType = deploymentType;
        return this;
    }

    /**
     * Get the provisioningState property: Provisioning state of Ledger Resource.
     *
     * @return the provisioningState value.
     */
    public ProvisioningState provisioningState() {
        return this.provisioningState;
    }

    /**
     * Get the nodeCount property: NodeCount
     *
     * <p>Number of CCF nodes in the Managed CCF.
     *
     * @return the nodeCount value.
     */
    public Integer nodeCount() {
        return this.nodeCount;
    }

    /**
     * Set the nodeCount property: NodeCount
     *
     * <p>Number of CCF nodes in the Managed CCF.
     *
     * @param nodeCount the nodeCount value to set.
     * @return the ManagedCcfProperties object itself.
     */
    public ManagedCcfProperties withNodeCount(Integer nodeCount) {
        this.nodeCount = nodeCount;
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    public void validate() {
        if (memberIdentityCertificates() != null) {
            memberIdentityCertificates().forEach(e -> e.validate());
        }
        if (deploymentType() != null) {
            deploymentType().validate();
        }
    }
}
