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

package com.azure.resourcemanager.kubernetesconfiguration.models;

import com.azure.core.management.SystemData;
import com.azure.resourcemanager.kubernetesconfiguration.fluent.models.FluxConfigurationInner;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Map;

/** An immutable client-side representation of FluxConfiguration. */
public interface FluxConfiguration {
    /**
     * Gets the id property: Fully qualified resource Id for the resource.
     *
     * @return the id value.
     */
    String id();

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

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

    /**
     * Gets the systemData property: Top level metadata
     * https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/common-api-contracts.md#system-metadata-for-all-azure-resources.
     *
     * @return the systemData value.
     */
    SystemData systemData();

    /**
     * Gets the scope property: Scope at which the operator will be installed.
     *
     * @return the scope value.
     */
    ScopeType scope();

    /**
     * Gets the namespace property: The namespace to which this configuration is installed to. Maximum of 253 lower case
     * alphanumeric characters, hyphen and period only.
     *
     * @return the namespace value.
     */
    String namespace();

    /**
     * Gets the sourceKind property: Source Kind to pull the configuration data from.
     *
     * @return the sourceKind value.
     */
    SourceKindType sourceKind();

    /**
     * Gets the suspend property: Whether this configuration should suspend its reconciliation of its kustomizations and
     * sources.
     *
     * @return the suspend value.
     */
    Boolean suspend();

    /**
     * Gets the gitRepository property: Parameters to reconcile to the GitRepository source kind type.
     *
     * @return the gitRepository value.
     */
    GitRepositoryDefinition gitRepository();

    /**
     * Gets the bucket property: Parameters to reconcile to the Bucket source kind type.
     *
     * @return the bucket value.
     */
    BucketDefinition bucket();

    /**
     * Gets the azureBlob property: Parameters to reconcile to the AzureBlob source kind type.
     *
     * @return the azureBlob value.
     */
    AzureBlobDefinition azureBlob();

    /**
     * Gets the kustomizations property: Array of kustomizations used to reconcile the artifact pulled by the source
     * type on the cluster.
     *
     * @return the kustomizations value.
     */
    Map<String, KustomizationDefinition> kustomizations();

    /**
     * Gets the configurationProtectedSettings property: Key-value pairs of protected configuration settings for the
     * configuration.
     *
     * @return the configurationProtectedSettings value.
     */
    Map<String, String> configurationProtectedSettings();

    /**
     * Gets the statuses property: Statuses of the Flux Kubernetes resources created by the fluxConfiguration or created
     * by the managed objects provisioned by the fluxConfiguration.
     *
     * @return the statuses value.
     */
    List<ObjectStatusDefinition> statuses();

    /**
     * Gets the repositoryPublicKey property: Public Key associated with this fluxConfiguration (either generated within
     * the cluster or provided by the user).
     *
     * @return the repositoryPublicKey value.
     */
    String repositoryPublicKey();

    /**
     * Gets the sourceSyncedCommitId property: Branch and/or SHA of the source commit synced with the cluster.
     *
     * @return the sourceSyncedCommitId value.
     */
    String sourceSyncedCommitId();

    /**
     * Gets the sourceUpdatedAt property: Datetime the fluxConfiguration synced its source on the cluster.
     *
     * @return the sourceUpdatedAt value.
     */
    OffsetDateTime sourceUpdatedAt();

    /**
     * Gets the statusUpdatedAt property: Datetime the fluxConfiguration synced its status on the cluster with Azure.
     *
     * @return the statusUpdatedAt value.
     */
    OffsetDateTime statusUpdatedAt();

    /**
     * Gets the complianceState property: Combined status of the Flux Kubernetes resources created by the
     * fluxConfiguration or created by the managed objects.
     *
     * @return the complianceState value.
     */
    FluxComplianceState complianceState();

    /**
     * Gets the provisioningState property: Status of the creation of the fluxConfiguration.
     *
     * @return the provisioningState value.
     */
    ProvisioningState provisioningState();

    /**
     * Gets the errorMessage property: Error message returned to the user in the case of provisioning failure.
     *
     * @return the errorMessage value.
     */
    String errorMessage();

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