# frozen_string_literal: true

wb = xlsx_package.workbook

header = wb.styles.add_style b: true, bg_color: Stylesheet.primary.upcase.gsub('#', 'FF'), fg_color: 'FFFFFFFF'
date = wb.styles.add_style format_code: Rails.application.secrets.excel_date_format

@indices.each do |index|
  next unless index.table

  index.statistic_types.each do |type|
    # see https://msdn.microsoft.com/fr-fr/library/c6bdca6y(v=vs.90).aspx for unauthorized character list
    sheet_name = "#{index.label} - #{type.label}".gsub(%r{[*|\\:"<>?/]}, '').truncate(31)
    wb.add_worksheet(name: sheet_name) do |sheet|
      ## data table
      # heading labels
      columns = [t('export.date'), t('export.user'), t('export.email'), t('export.phone'), t('export.gender'), t('export.age'),
                 t('export.type')]
      columns.push type.label unless type.simple
      index.statistic_fields.each do |f|
        columns.push f.label
      end
      columns.push t('export.revenue') if index.ca
      sheet.add_row columns, style: header

      # data rows
      @results['hits']['hits'].each do |hit|
        # check that the current result is for the given index and type
        next unless hit['_type'] == index.es_type_key && hit['_source']['type'] == type.key

        # get matching objects
        user = get_item(@users, hit['_source']['userId'])
        subtype = get_item(type.statistic_sub_types, hit['_source']['subType'], 'key')
        # start to fill data and associated styles and data-types
        data, styles, types = statistics_line(hit, user, type, subtype, date)
        # proceed additional fields
        index.statistic_fields.each do |f|
          format_xlsx_cell(hit['_source'][f.key], data, styles, types, source_data_type: f.data_type, date_format: date)
        end
        # proceed the 'ca' field if requested
        add_ca_cell(index, hit, data, styles, types)

        # finally, add the data row to the workbook's sheet
        sheet.add_row data, style: styles, types: types
      end
    end
  end
end