docs: public Project createProject(Project project, String importUrl) throws GitLabApiException {
  
          if (project == null) {
              return (null);
          }
  
          String name = project.getName();
          String path = project.getPath();
  
          if ((name == null || name.trim().length() == 0) && (path == null || path.trim().length() == 0)) {
              return (null);
          }
  
          GitLabApiForm formData = new GitLabApiForm()
              .withParam("name", name)
              .withParam("path", path)
              .withParam("default_branch", project.getDefaultBranch())
              .withParam("description", project.getDescription())
              .withParam("issues_enabled", project.getIssuesEnabled())
              .withParam("merge_method",  project.getMergeMethod())
              .withParam("merge_requests_enabled", project.getMergeRequestsEnabled())
              .withParam("jobs_enabled", project.getJobsEnabled())
              .withParam("wiki_enabled", project.getWikiEnabled())
              .withParam("container_registry_enabled", project.getContainerRegistryEnabled())
              .withParam("snippets_enabled", project.getSnippetsEnabled())
              .withParam("shared_runners_enabled", project.getSharedRunnersEnabled())
              .withParam("public_jobs", project.getPublicJobs())
              .withParam("visibility_level", project.getVisibilityLevel())
              .withParam("only_allow_merge_if_pipeline_succeeds", project.getOnlyAllowMergeIfPipelineSucceeds())
              .withParam("only_allow_merge_if_all_discussions_are_resolved", project.getOnlyAllowMergeIfAllDiscussionsAreResolved())
              .withParam("lfs_enabled", project.getLfsEnabled())
              .withParam("request_access_enabled", project.getRequestAccessEnabled())
              .withParam("repository_storage", project.getRepositoryStorage())
              .withParam("approvals_before_merge", project.getApprovalsBeforeMerge())
              .withParam("import_url", importUrl)
              .withParam("printing_merge_request_link_enabled", project.getPrintingMergeRequestLinkEnabled())
              .withParam("resolve_outdated_diff_discussions", project.getResolveOutdatedDiffDiscussions())
              .withParam("initialize_with_readme", project.getInitializeWithReadme())
              .withParam("packages_enabled", project.getPackagesEnabled());
  
          if (isApiVersion(ApiVersion.V3)) {
              boolean isPublic = (project.getPublic() != null ? project.getPublic() : project.getVisibility() == Visibility.PUBLIC);
              formData.withParam("public", isPublic);
  
              if (project.getTagList() != null && !project.getTagList().isEmpty()) {
                  throw new IllegalArgumentException("GitLab API v3 does not support tag lists when creating projects");
              }
          } else {
              Visibility visibility = (project.getVisibility() != null ? project.getVisibility() :
                  project.getPublic() == Boolean.TRUE ? Visibility.PUBLIC : null);
              formData.withParam("visibility", visibility);
  
              if (project.getTagList() != null && !project.getTagList().isEmpty()) {
                  formData.withParam("tag_list", String.join(",", project.getTagList()));
              }
          }
  
          if (project.getNamespace() != null) {
              formData.withParam("namespace_id", project.getNamespace().getId());
          }
  
          Response response = post(Response.Status.CREATED, formData, "projects");
          return (response.readEntity(Project.class));
      }