module Workstation
  class BasePage < UniversalPage
    include Workstation::TopNav

    page_url("")

    div(:welcome, id: "welcome")
    # Matches the text "Logout" OR "Log out", case insensitive:
    span(:label_span) { welcome_element.span_element(class: "subtextlink2") }
    # For features/analytics.feature:28 TODO: add this to the rest of WS
    element(:label_name, :b, id: "label-name")
    element(:subaccount_name, :b, id: "subaccount-name")

    h1(:page_title) { div_element(id: "content").h1_element }
    div(:page_content, id: "content")
    h1(:page_header) { page_content_element.h1_element }

    button(:label_dropdown_button) do
      div_element(class: %w[dropdown account])
        .button_element(class: "dropdown-toggle")
    end
    link(:new_label_dropdown_link, id: "header-dropdown")
    link(:label_name_dropdown, id: "header-dropdown")
    div(:reactified_homepage, id: "reactified_homepage")
    div(:label_name_dropdown_react, id: "HeaderAccountDetails")
    link(:logout_link, href: /logout/)
    link(:react_logout_link, id: "NavDropdown-logout")
    div(:old_dropdown, class: %w[dropdown account])

    def logged_in_as?(user_data)
      if reactified_homepage_element.element.present?
        return label_name_dropdown_react_element.when_present.text.include? user_data[:contact_name]
      end
      wait_until { label_name_dropdown_element.present? }
      label_name_dropdown_element.text.include? user_data[:contact_name]
    end

    def logout
      if reactified_homepage?
        # Not adding a page object element here because it will be part of ReactBasePage
        div_element(id: "HeaderAccountDetails").click
      elsif new_label_dropdown_link_element.present?
        new_label_dropdown_link_element.click
      else
        old_dropdown_element.click
      end
      if react_logout_link_element.present?
        react_logout_link
      else
        logout_link
      end
    end

    def logged_in?
      label_name_dropdown_element.element.present? || reactified_homepage?
    end

    # TODO: this can almost definitely be removed with WSR
    def valid_login_header?
      label_name_dropdown?
    end
  end
end
