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

package com.azure.resourcemanager.customerinsights.models;

import com.azure.core.util.Context;
import com.azure.resourcemanager.customerinsights.fluent.models.RoleAssignmentResourceFormatInner;
import java.util.List;
import java.util.Map;

/** An immutable client-side representation of RoleAssignmentResourceFormat. */
public interface RoleAssignmentResourceFormat {
    /**
     * 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 tenantId property: The hub name.
     *
     * @return the tenantId value.
     */
    String tenantId();

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

    /**
     * Gets the displayName property: Localized display names for the metadata.
     *
     * @return the displayName value.
     */
    Map<String, String> displayName();

    /**
     * Gets the description property: Localized description for the metadata.
     *
     * @return the description value.
     */
    Map<String, String> description();

    /**
     * Gets the provisioningState property: Provisioning state.
     *
     * @return the provisioningState value.
     */
    ProvisioningStates provisioningState();

    /**
     * Gets the role property: Type of roles.
     *
     * @return the role value.
     */
    RoleTypes role();

    /**
     * Gets the principals property: The principals being assigned to.
     *
     * @return the principals value.
     */
    List<AssignmentPrincipal> principals();

    /**
     * Gets the profiles property: Profiles set for the assignment.
     *
     * @return the profiles value.
     */
    ResourceSetDescription profiles();

    /**
     * Gets the interactions property: Interactions set for the assignment.
     *
     * @return the interactions value.
     */
    ResourceSetDescription interactions();

    /**
     * Gets the links property: Links set for the assignment.
     *
     * @return the links value.
     */
    ResourceSetDescription links();

    /**
     * Gets the kpis property: Kpis set for the assignment.
     *
     * @return the kpis value.
     */
    ResourceSetDescription kpis();

    /**
     * Gets the sasPolicies property: Sas Policies set for the assignment.
     *
     * @return the sasPolicies value.
     */
    ResourceSetDescription sasPolicies();

    /**
     * Gets the connectors property: Connectors set for the assignment.
     *
     * @return the connectors value.
     */
    ResourceSetDescription connectors();

    /**
     * Gets the views property: Views set for the assignment.
     *
     * @return the views value.
     */
    ResourceSetDescription views();

    /**
     * Gets the relationshipLinks property: The Role assignments set for the relationship links.
     *
     * @return the relationshipLinks value.
     */
    ResourceSetDescription relationshipLinks();

    /**
     * Gets the relationships property: The Role assignments set for the relationships.
     *
     * @return the relationships value.
     */
    ResourceSetDescription relationships();

    /**
     * Gets the widgetTypes property: Widget types set for the assignment.
     *
     * @return the widgetTypes value.
     */
    ResourceSetDescription widgetTypes();

    /**
     * Gets the roleAssignments property: The Role assignments set for the assignment.
     *
     * @return the roleAssignments value.
     */
    ResourceSetDescription roleAssignments();

    /**
     * Gets the conflationPolicies property: Widget types set for the assignment.
     *
     * @return the conflationPolicies value.
     */
    ResourceSetDescription conflationPolicies();

    /**
     * Gets the segments property: The Role assignments set for the assignment.
     *
     * @return the segments value.
     */
    ResourceSetDescription segments();

    /**
     * Gets the name of the resource group.
     *
     * @return the name of the resource group.
     */
    String resourceGroupName();

    /**
     * Gets the inner com.azure.resourcemanager.customerinsights.fluent.models.RoleAssignmentResourceFormatInner object.
     *
     * @return the inner object.
     */
    RoleAssignmentResourceFormatInner innerModel();

    /** The entirety of the RoleAssignmentResourceFormat definition. */
    interface Definition
        extends DefinitionStages.Blank, DefinitionStages.WithParentResource, DefinitionStages.WithCreate {
    }
    /** The RoleAssignmentResourceFormat definition stages. */
    interface DefinitionStages {
        /** The first stage of the RoleAssignmentResourceFormat definition. */
        interface Blank extends WithParentResource {
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify parent resource. */
        interface WithParentResource {
            /**
             * Specifies resourceGroupName, hubName.
             *
             * @param resourceGroupName The name of the resource group.
             * @param hubName The name of the hub.
             * @return the next definition stage.
             */
            WithCreate withExistingHub(String resourceGroupName, String hubName);
        }
        /**
         * The stage of the RoleAssignmentResourceFormat definition which contains all the minimum required properties
         * for the resource to be created, but also allows for any other optional properties to be specified.
         */
        interface WithCreate
            extends DefinitionStages.WithDisplayName,
                DefinitionStages.WithDescription,
                DefinitionStages.WithRole,
                DefinitionStages.WithPrincipals,
                DefinitionStages.WithProfiles,
                DefinitionStages.WithInteractions,
                DefinitionStages.WithLinks,
                DefinitionStages.WithKpis,
                DefinitionStages.WithSasPolicies,
                DefinitionStages.WithConnectors,
                DefinitionStages.WithViews,
                DefinitionStages.WithRelationshipLinks,
                DefinitionStages.WithRelationships,
                DefinitionStages.WithWidgetTypes,
                DefinitionStages.WithRoleAssignments,
                DefinitionStages.WithConflationPolicies,
                DefinitionStages.WithSegments {
            /**
             * Executes the create request.
             *
             * @return the created resource.
             */
            RoleAssignmentResourceFormat create();

            /**
             * Executes the create request.
             *
             * @param context The context to associate with this operation.
             * @return the created resource.
             */
            RoleAssignmentResourceFormat create(Context context);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify displayName. */
        interface WithDisplayName {
            /**
             * Specifies the displayName property: Localized display names for the metadata..
             *
             * @param displayName Localized display names for the metadata.
             * @return the next definition stage.
             */
            WithCreate withDisplayName(Map<String, String> displayName);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify description. */
        interface WithDescription {
            /**
             * Specifies the description property: Localized description for the metadata..
             *
             * @param description Localized description for the metadata.
             * @return the next definition stage.
             */
            WithCreate withDescription(Map<String, String> description);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify role. */
        interface WithRole {
            /**
             * Specifies the role property: Type of roles..
             *
             * @param role Type of roles.
             * @return the next definition stage.
             */
            WithCreate withRole(RoleTypes role);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify principals. */
        interface WithPrincipals {
            /**
             * Specifies the principals property: The principals being assigned to..
             *
             * @param principals The principals being assigned to.
             * @return the next definition stage.
             */
            WithCreate withPrincipals(List<AssignmentPrincipal> principals);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify profiles. */
        interface WithProfiles {
            /**
             * Specifies the profiles property: Profiles set for the assignment..
             *
             * @param profiles Profiles set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withProfiles(ResourceSetDescription profiles);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify interactions. */
        interface WithInteractions {
            /**
             * Specifies the interactions property: Interactions set for the assignment..
             *
             * @param interactions Interactions set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withInteractions(ResourceSetDescription interactions);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify links. */
        interface WithLinks {
            /**
             * Specifies the links property: Links set for the assignment..
             *
             * @param links Links set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withLinks(ResourceSetDescription links);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify kpis. */
        interface WithKpis {
            /**
             * Specifies the kpis property: Kpis set for the assignment..
             *
             * @param kpis Kpis set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withKpis(ResourceSetDescription kpis);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify sasPolicies. */
        interface WithSasPolicies {
            /**
             * Specifies the sasPolicies property: Sas Policies set for the assignment..
             *
             * @param sasPolicies Sas Policies set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withSasPolicies(ResourceSetDescription sasPolicies);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify connectors. */
        interface WithConnectors {
            /**
             * Specifies the connectors property: Connectors set for the assignment..
             *
             * @param connectors Connectors set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withConnectors(ResourceSetDescription connectors);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify views. */
        interface WithViews {
            /**
             * Specifies the views property: Views set for the assignment..
             *
             * @param views Views set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withViews(ResourceSetDescription views);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify relationshipLinks. */
        interface WithRelationshipLinks {
            /**
             * Specifies the relationshipLinks property: The Role assignments set for the relationship links..
             *
             * @param relationshipLinks The Role assignments set for the relationship links.
             * @return the next definition stage.
             */
            WithCreate withRelationshipLinks(ResourceSetDescription relationshipLinks);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify relationships. */
        interface WithRelationships {
            /**
             * Specifies the relationships property: The Role assignments set for the relationships..
             *
             * @param relationships The Role assignments set for the relationships.
             * @return the next definition stage.
             */
            WithCreate withRelationships(ResourceSetDescription relationships);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify widgetTypes. */
        interface WithWidgetTypes {
            /**
             * Specifies the widgetTypes property: Widget types set for the assignment..
             *
             * @param widgetTypes Widget types set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withWidgetTypes(ResourceSetDescription widgetTypes);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify roleAssignments. */
        interface WithRoleAssignments {
            /**
             * Specifies the roleAssignments property: The Role assignments set for the assignment..
             *
             * @param roleAssignments The Role assignments set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withRoleAssignments(ResourceSetDescription roleAssignments);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify conflationPolicies. */
        interface WithConflationPolicies {
            /**
             * Specifies the conflationPolicies property: Widget types set for the assignment..
             *
             * @param conflationPolicies Widget types set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withConflationPolicies(ResourceSetDescription conflationPolicies);
        }
        /** The stage of the RoleAssignmentResourceFormat definition allowing to specify segments. */
        interface WithSegments {
            /**
             * Specifies the segments property: The Role assignments set for the assignment..
             *
             * @param segments The Role assignments set for the assignment.
             * @return the next definition stage.
             */
            WithCreate withSegments(ResourceSetDescription segments);
        }
    }
    /**
     * Begins update for the RoleAssignmentResourceFormat resource.
     *
     * @return the stage of resource update.
     */
    RoleAssignmentResourceFormat.Update update();

    /** The template for RoleAssignmentResourceFormat update. */
    interface Update
        extends UpdateStages.WithDisplayName,
            UpdateStages.WithDescription,
            UpdateStages.WithRole,
            UpdateStages.WithPrincipals,
            UpdateStages.WithProfiles,
            UpdateStages.WithInteractions,
            UpdateStages.WithLinks,
            UpdateStages.WithKpis,
            UpdateStages.WithSasPolicies,
            UpdateStages.WithConnectors,
            UpdateStages.WithViews,
            UpdateStages.WithRelationshipLinks,
            UpdateStages.WithRelationships,
            UpdateStages.WithWidgetTypes,
            UpdateStages.WithRoleAssignments,
            UpdateStages.WithConflationPolicies,
            UpdateStages.WithSegments {
        /**
         * Executes the update request.
         *
         * @return the updated resource.
         */
        RoleAssignmentResourceFormat apply();

        /**
         * Executes the update request.
         *
         * @param context The context to associate with this operation.
         * @return the updated resource.
         */
        RoleAssignmentResourceFormat apply(Context context);
    }
    /** The RoleAssignmentResourceFormat update stages. */
    interface UpdateStages {
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify displayName. */
        interface WithDisplayName {
            /**
             * Specifies the displayName property: Localized display names for the metadata..
             *
             * @param displayName Localized display names for the metadata.
             * @return the next definition stage.
             */
            Update withDisplayName(Map<String, String> displayName);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify description. */
        interface WithDescription {
            /**
             * Specifies the description property: Localized description for the metadata..
             *
             * @param description Localized description for the metadata.
             * @return the next definition stage.
             */
            Update withDescription(Map<String, String> description);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify role. */
        interface WithRole {
            /**
             * Specifies the role property: Type of roles..
             *
             * @param role Type of roles.
             * @return the next definition stage.
             */
            Update withRole(RoleTypes role);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify principals. */
        interface WithPrincipals {
            /**
             * Specifies the principals property: The principals being assigned to..
             *
             * @param principals The principals being assigned to.
             * @return the next definition stage.
             */
            Update withPrincipals(List<AssignmentPrincipal> principals);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify profiles. */
        interface WithProfiles {
            /**
             * Specifies the profiles property: Profiles set for the assignment..
             *
             * @param profiles Profiles set for the assignment.
             * @return the next definition stage.
             */
            Update withProfiles(ResourceSetDescription profiles);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify interactions. */
        interface WithInteractions {
            /**
             * Specifies the interactions property: Interactions set for the assignment..
             *
             * @param interactions Interactions set for the assignment.
             * @return the next definition stage.
             */
            Update withInteractions(ResourceSetDescription interactions);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify links. */
        interface WithLinks {
            /**
             * Specifies the links property: Links set for the assignment..
             *
             * @param links Links set for the assignment.
             * @return the next definition stage.
             */
            Update withLinks(ResourceSetDescription links);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify kpis. */
        interface WithKpis {
            /**
             * Specifies the kpis property: Kpis set for the assignment..
             *
             * @param kpis Kpis set for the assignment.
             * @return the next definition stage.
             */
            Update withKpis(ResourceSetDescription kpis);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify sasPolicies. */
        interface WithSasPolicies {
            /**
             * Specifies the sasPolicies property: Sas Policies set for the assignment..
             *
             * @param sasPolicies Sas Policies set for the assignment.
             * @return the next definition stage.
             */
            Update withSasPolicies(ResourceSetDescription sasPolicies);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify connectors. */
        interface WithConnectors {
            /**
             * Specifies the connectors property: Connectors set for the assignment..
             *
             * @param connectors Connectors set for the assignment.
             * @return the next definition stage.
             */
            Update withConnectors(ResourceSetDescription connectors);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify views. */
        interface WithViews {
            /**
             * Specifies the views property: Views set for the assignment..
             *
             * @param views Views set for the assignment.
             * @return the next definition stage.
             */
            Update withViews(ResourceSetDescription views);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify relationshipLinks. */
        interface WithRelationshipLinks {
            /**
             * Specifies the relationshipLinks property: The Role assignments set for the relationship links..
             *
             * @param relationshipLinks The Role assignments set for the relationship links.
             * @return the next definition stage.
             */
            Update withRelationshipLinks(ResourceSetDescription relationshipLinks);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify relationships. */
        interface WithRelationships {
            /**
             * Specifies the relationships property: The Role assignments set for the relationships..
             *
             * @param relationships The Role assignments set for the relationships.
             * @return the next definition stage.
             */
            Update withRelationships(ResourceSetDescription relationships);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify widgetTypes. */
        interface WithWidgetTypes {
            /**
             * Specifies the widgetTypes property: Widget types set for the assignment..
             *
             * @param widgetTypes Widget types set for the assignment.
             * @return the next definition stage.
             */
            Update withWidgetTypes(ResourceSetDescription widgetTypes);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify roleAssignments. */
        interface WithRoleAssignments {
            /**
             * Specifies the roleAssignments property: The Role assignments set for the assignment..
             *
             * @param roleAssignments The Role assignments set for the assignment.
             * @return the next definition stage.
             */
            Update withRoleAssignments(ResourceSetDescription roleAssignments);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify conflationPolicies. */
        interface WithConflationPolicies {
            /**
             * Specifies the conflationPolicies property: Widget types set for the assignment..
             *
             * @param conflationPolicies Widget types set for the assignment.
             * @return the next definition stage.
             */
            Update withConflationPolicies(ResourceSetDescription conflationPolicies);
        }
        /** The stage of the RoleAssignmentResourceFormat update allowing to specify segments. */
        interface WithSegments {
            /**
             * Specifies the segments property: The Role assignments set for the assignment..
             *
             * @param segments The Role assignments set for the assignment.
             * @return the next definition stage.
             */
            Update withSegments(ResourceSetDescription segments);
        }
    }
    /**
     * Refreshes the resource to sync with Azure.
     *
     * @return the refreshed resource.
     */
    RoleAssignmentResourceFormat refresh();

    /**
     * Refreshes the resource to sync with Azure.
     *
     * @param context The context to associate with this operation.
     * @return the refreshed resource.
     */
    RoleAssignmentResourceFormat refresh(Context context);
}
