module ReactWorkstation
  class CollaboratorTrack < Workstation::BasePage
    page_url "/accounting/collaborators/view/<%=params[:track]%>"
    div(:collab_editor, class: "TrackCollaboratorEditor")
    div(:track_list, class: "TrackList")
    div(:collaborator_panel, class: "ProductCollaboratorEditor-panel")
    span(:collaborator_name) do
      collaborator_panel_element.span_element(id: "react-select-4--value")
    end
    button(:add_collab, 'data-testid': "add-collaborator-btn")
    buttons(:delete_collab, 'data-testid': "delete-button")
    button(:new_collab, class: "SplitRateEditItem-add-collaborator")
    div(:split_edit_field, class: "Select-placeholder")
    text_field(:collab_name) do
      div_element(class: "ArtistDropdown-container").text_field_element
    end
    button(:add_collab_modal, 'data-testid': "add-collaborator-button")
    div(:loader, class: "TableCellLoader-line")
    div(:vendor_percentage, class: "ProductCollaboratorEditor-vendor-split-percentage")
    divs(:collaborator_percentage, class: "SplitRateEditItem-percentage-dropdown")
    divs(:product_percentage_dropdown, class: "SplitRateEditItem-percentage-dropdown")
    button(:save_collab, 'data-testid': "footer-button-save")
    button(:saved_collab, 'aria-label': "Saved")
    span(:collaborator) do
      div_element(class: "SplitRateEditItem-collaborator-search").span_element(class: "Select-value-label")
    end

    def create_collaborator(name, collaborator_type)
      add_collab_element.click
      return if collaborator_type == "blank"
      split_edit_field_element.click
      new_collab_element.click
      self.collab_name = name
      div_element(text: "+ Create New Artist \"#{name}\"").click
      wait_until { div_element(text: name).present? }
      add_collab_modal
      add_collab_modal_element.when_not_present
    end

    def collaborator_added?(name)
      collaborator_panel_element.span_element(text: name).present?
    end

    def first_collaborator
      if collaborator_name_element.present?
        first_collaborator_name = collaborator_name
        first_collaborator_name.gsub!(/\s-.+/, "")
      else
        first_collaborator_name = Support::Helpers::UniqueGenerator.unique_string
        create_collaborator(first_collaborator_name, "New")
        set_collaborator_percentage(1, "1%")
      end
      save_changes
      first_collaborator_name
    end

    def delete_collaborator_splits
      delete_collab_elements.each { |x| x.click if x.present? }
    end

    def percentage_to_float(percentage)
      percentage = percentage.text.tr("%", "")
      percentage.to_f
    end

    def total_percentage_from_elements
      total_percentage = percentage_to_float(vendor_percentage_element)
      collaborator_percentage_elements.each do |collaborator_percentage|
        total_percentage += percentage_to_float(collaborator_percentage)
      end
      total_percentage
    end

    def set_collaborator_percentage(collaborator_number, percentage)
      collaborator_number -= 1
      product_percentage_dropdown_elements[collaborator_number].click
      div_elements(class: "Select-option").find { |element| element.text == percentage }.element.click
    end

    def save_changes(ensure_save_successful = false)
      save_collab_element.click unless save_collab_element.disabled?
      return unless ensure_save_successful
      wait_until { saved_collab_element.present? }
    end
  end
end
