/// <summary>
        /// This method is used to create a project folder item model.
        /// </summary>
        /// <param name="client">Contains the <see cref="InspireClient"/> that is used for communication.</param>
        /// <param name="projectId">Contains the identity of the parent project.</param>
        /// <param name="model">Contains a <see cref="ProjectFolderItemModel"/> to create.</param>
        /// <returns>Returns the newly created <see cref="ProjectFolderItemModel"/> object.</returns>
        public static ProjectFolderItemModel CreateProjectFolder(this InspireClient client, long projectId, ProjectFolderItemModel model)
        {
            if (projectId <= 0)
            {
                throw new ArgumentNullException(nameof(projectId));
            }

            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var request = client.CreateRequest($"/Projects/{projectId}/FolderItems", HttpMethod.Post);

            return(client.RequestContent <ProjectFolderItemModel, ProjectFolderItemModel>(request, model));
        }
        /// <summary>
        /// This method is used to move a project folder to another target folder.
        /// </summary>
        /// <param name="client">Contains the <see cref="InspireClient"/> that is used for communication.</param>
        /// <param name="model">Contains the existing project folder item model to move.</param>
        /// <param name="projectId">Contains the identity of the parent project.</param>
        /// <param name="itemId">Contains the identity of the folder item object.</param>
        /// <param name="targetFolderId">Contains the new target folder of the folder item.</param>
        /// <returns>Returns the <see cref="ProjectFolderItemModel"/> object.</returns>
        public static ProjectFolderItemModel MoveProjectFolder(this InspireClient client, ProjectFolderItemModel model, long projectId, string itemId, string targetFolderId = "")
        {
            if (projectId <= 0)
            {
                throw new ArgumentNullException(nameof(projectId));
            }

            if (string.IsNullOrEmpty(itemId))
            {
                throw new ArgumentNullException(nameof(itemId));
            }

            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var request = client.CreateRequest($"/Projects/{projectId}/FolderItems/{itemId}/Move/{targetFolderId}", HttpMethod.Put);

            return(client.RequestContent <ProjectFolderItemModel, ProjectFolderItemModel>(request, model));
        }
        /// <summary>
        /// This method is used to delete a project folder item model.
        /// </summary>
        /// <param name="client">Contains the <see cref="InspireClient"/> that is used for communication.</param>
        /// <param name="projectId">Contains the identity of the parent project.</param>
        /// <param name="model">Contains the existing <see cref="ProjectFolderItemModel"/> to delete.</param>
        /// <returns>Returns a boolean value indicating whether the action succeeded or not.</returns>
        public static bool DeleteProjectFolder(this InspireClient client, long projectId, ProjectFolderItemModel model)
        {
            if (projectId <= 0)
            {
                throw new ArgumentNullException(nameof(projectId));
            }

            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var request = client.CreateRequest($"/Projects/{projectId}/FolderItems/0", HttpMethod.Delete);

            client.RequestContent(request, model);
            return(client.HasError);
        }