# This file was generated automatically by scripts/user_classes_header_generator.py do not modify it!
# If the user access files are modified, this file has to be regenerated with the script.
from typing import Optional, Union
from pandas import DataFrame
from dataclasses import dataclass
import shimoku


class WorkspacesLayerHeader:
    """
    This class is used to interact with the API at the Workspace layer
    """

    def change_boards_order(
        self,
        boards: list,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ):
        """Change the order of the boards of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :param boards: list of dashboard names
        """
        pass

    def change_menu_order(
        self,
        menu_order: list,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ):
        """Change the order of the menu of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :param menu_order: list of menu names
        """
        pass

    def create_role(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
        resource: Optional[str] = None,
        role_name: Optional[str] = None,
        permission: Optional[str] = None,
        target: Optional[str] = None,
    ) -> dict:
        """
        Create a new role at the resource level
        :param name: name of the resource
        :param uuid: uuid of the resource
        :param resource: resource of the role
        :param role_name: name of the role
        :param permission: permission of the role
        :param target: target of the role
        """
        pass

    def create_workspace(
        self,
        name: str,
        create_default_roles: bool = True,
        theme: Optional[dict] = None,
    ) -> dict:
        """Create a new workspace and the necessary roles if specified
        :param name: Name of the workspace
        :param create_default_roles: Create the default roles for the workspace
        :param theme: Theme of the workspace
        :return: workspace data
        """
        pass

    def delete_all_workspace_boards(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
        force: bool = False,
    ):
        """Delete all boards of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :param force: Flag to force delete the boards
        """
        pass

    def delete_all_workspace_menu_paths(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ):
        """Delete all menu paths of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        """
        pass

    def delete_pending_invitation(
        self,
        email: str,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> bool:
        """Delete a pending invitation of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :param email: Email of the user
        :return: True if the invitation was deleted
        """
        pass

    def delete_role(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
        role_id: Optional[str] = None,
        role_name: Optional[str] = None,
    ):
        """
        Delete the role at the resource level
        :param name: name of the resource
        :param uuid: uuid of the resource
        :param role_id: id of the role
        :param role_name: name of the role
        """
        pass

    def delete_workspace(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> bool:
        """Delete a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :return: True if the workspace was deleted
        """
        pass

    def get_all_workspace_users(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> list:
        """Get the users of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :return: list of users
        """
        pass

    def get_pending_invitations(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> list:
        """Get the pending invitations of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :return: list of invitations
        """
        pass

    def get_role(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
        role_name: Optional[str] = None,
    ) -> list:
        """
        Get the role at the resource level
        :param name: name of the resource
        :param uuid: uuid of the resource
        :param role_name: name of the role
        """
        pass

    def get_roles(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> list:
        """
        Get the roles at the resource level
        :param name: name of the resource
        :param uuid: uuid of the resource
        """
        pass

    def get_workspace(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> dict:
        """Get a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :return: Workspace data
        """
        pass

    def get_workspace_boards(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> list:
        """Get the boards of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :return: list of dashboards
        """
        pass

    def get_workspace_menu_path_ids(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> list:
        """Get the menu path ids of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :return: list of app ids
        """
        pass

    def get_workspace_menu_paths(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> list:
        """Get the menu paths of a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :return: list of apps
        """
        pass

    def invite_user(
        self,
        email: str,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
        roles: Optional[list[str]] = None,
        send_email: bool = True,
    ) -> Optional[dict]:
        """Invite a user to the workspace
        :param email: Email of the user
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :param roles: Roles of the user
        :param send_email: Send the invitation email
        :return: Invitation data
        """
        pass

    def remove_user_from_workspace(
        self,
        email: str,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
    ) -> bool:
        """Remove a user from a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :param email: Email of the user
        :return: True if the user was removed
        """
        pass

    def update_workspace(
        self,
        uuid: Optional[str] = None,
        name: Optional[str] = None,
        new_name: Optional[str] = None,
        theme: Optional[dict] = None,
    ) -> bool:
        """Update a workspace
        :param name: Name of the workspace
        :param uuid: UUID of the workspace
        :param new_name: New name of the workspace
        :param theme: New theme of the workspace
        :return: True if the workspace was updated
        """
        pass
