# frozen_string_literal: true

module WebIdeButtonHelper
  def project_fork
    current_user&.fork_of(@project)
  end

  def project_to_use
    fork? ? project_fork : @project
  end

  def can_collaborate?
    can_collaborate_with_project?(@project)
  end

  def can_create_mr_from_fork?
    can?(current_user, :fork_project, @project) && can?(current_user, :create_merge_request_in, @project)
  end

  def show_web_ide_button?
    can_collaborate? || can_create_mr_from_fork?
  end

  def show_edit_button?(options = {})
    readable_blob?(options) && show_web_ide_button?
  end

  def show_gitpod_button?
    show_web_ide_button? && Gitlab::CurrentSettings.gitpod_enabled
  end

  def show_pipeline_editor_button?(project, path)
    can_view_pipeline_editor?(project) && path == project.ci_config_path_or_default
  end

  def can_push_code?
    current_user&.can?(:push_code, @project)
  end

  def fork?
    !project_fork.nil? && !can_push_code?
  end

  def readable_blob?(options = {})
    !readable_blob(options, @path, @project, @ref).nil?
  end

  def needs_to_fork?
    !can_collaborate? && !current_user&.already_forked?(@project)
  end

  def web_ide_url
    ide_edit_path(project_to_use, @ref, @path || '')
  end

  def edit_url(options = {})
    readable_blob?(options) ? edit_blob_path(@project, @ref, @path || '') : ''
  end

  def gitpod_url
    return "" unless Gitlab::CurrentSettings.gitpod_enabled

    "#{Gitlab::CurrentSettings.gitpod_url}##{project_tree_url(@project, tree_join(@ref, @path || ''))}"
  end
end
