module Accounting
  class ViewRequestedReports < UniversalPage
    TABLE_COLUMN_INDEXES = {
      date: 0,
      transaction_types: 2,
      number_format: 3,
      file_type: 4,
      status: 5
    }.freeze

    include PageHelpers::ReactHelpers
    page_url("accounting/statementshistory/period/<%=params[:report_period]%>/
                        <%=params[:period]%>/<%=params[:period]%>/history")

    div(:report_form_wrapper, class: "report_form")
    h2(:page_header) { report_form_wrapper_element.element.h2 }
    p(:note_paragraph) { report_form_wrapper_element.element.p }
    table(:requested_report_table, class: %w[table table-striped])
    table(:download_link) { link_element(text: "Download") }
    div(:alert_wrapper, class: %w[alert alert-success])
    p(:alert_msg) { alert_wrapper_element.element.p }
    div(:progress_bar, class: %w[progress-bar active progress-bar-striped])
    elements(:reports, class: "report")

    def wait_for_progress_bar
      progress_bar_element.element.wait_while(timeout: 60, &:present?)
    end

    def report_details(report_row)
      {
        date: report_row.td(index: TABLE_COLUMN_INDEXES[:date]).text,
        number_format: report_row.td(index: TABLE_COLUMN_INDEXES[:number_format]).text,
        file_type: report_row.td(index: TABLE_COLUMN_INDEXES[:file_type]).text,
        report_type: parse_report_type(report_row.td(index: TABLE_COLUMN_INDEXES[:transaction_types]).text),
        transaction_types: report_row.td(index: TABLE_COLUMN_INDEXES[:transaction_types]).text,
        status: report_row.td(index: TABLE_COLUMN_INDEXES[:status]).text
      }
    end

    private

    def parse_report_type(transaction_types)
      case transaction_types
      when "All"
        "full"
      when "Physical"
        "physical"
      else
        "custom"
      end
    end
  end
end
