module OA
  class ViewVendorPage < OA::BasePage
    page_url "/cont_mgmt/view_vendor.php"

    div(:youtube_details_header, text: "YouTube Partnered Channels")
    table(:youtube_details_table, id: "youtube-details-table")
    cell(:account_manager_name) { youtube_details_table_element[1][0] }
    cell(:youtube_channel_name) { youtube_details_table_element[1][1] }
    link(:edit_channel_link) { youtube_details_table_element[1][2].link_element(text: "Edit") }
    link(:login_as_admin_user, text: "Login as Admin")
    link(:youtube_audit_beta, id: "youtube-audit-beta")
    table(:catalog_table, id: "catalog-table")
    link(:first_release) { catalog_table_element[1]["Release Name"].link_element(text: /\S/) }
    table(:label_contacts_table, id: "label-contacts-table")
    link(:login_as_film_user, text: "film_user")
    link(:login_as_tv_user, text: "tv_user")
    div(:active_contract_table, id: "active-terms-container")
    link(:active_contract) { active_contract_table_element.link_element }
    div(:active_terms_panel, id: "active-terms-panel")
    link(:view_contracts) { active_terms_panel_element.link_element(text: "View Contracts") }
    div(:label_info_panel, id: "label_info")
    tables(:label_info_panel_data) { label_info_panel_element.table_elements(class: "form") }

    def impersonate_login_for(user: :admin)
      send("login_as_#{user}_user") # opens new window
      browser.window.close
    end

    def label_contact_link(user)
      user_login = "#{user}_user"
      user_row = label_contacts_table_element[user_login]
      fail "#{user_login} was not found in the Label Contacts table" unless user_row
      user_row.link_element(text: "Edit")
    end

    def verify_label_info_data(vendor_label_data)
      verify_label_info_data1(vendor_label_data)
      verify_label_info_data2(vendor_label_data)
    end

    private

    def verify_label_info_data1(vendor_label_data)
      label_data_info_table = label_info_panel_data_elements[0]
      expect(label_data_info_table["Owner"][1].text).to eql vendor_label_data[:owner].downcase
      expect(label_data_info_table["Assigned To"][1].text).to eql vendor_label_data[:assignment]
    end

    def verify_label_info_data2(vendor_label_data)
      label_data_info_table = label_info_panel_data_elements[1]
      expect(label_data_info_table["Label Priority"][1].text).to eql vendor_label_data[:label_priority]
      expect(label_data_info_table["Country"][1].text).to eql vendor_label_data[:country]
    end
  end
end
