# frozen_string_literal: true

class Lite::Report::Base

  include Lite::Report::Helpers::Converters
  include Lite::Report::Helpers::Encoders
  include Lite::Report::Helpers::Filters
  include Lite::Report::Helpers::Headers
  include Lite::Report::Helpers::Processors
  include Lite::Report::Helpers::Records
  include Lite::Report::Helpers::Transporters

  def initialize(data, csv_options: {}, data_options: {}, import_options: {})
    @data = data
    @csv_options = Lite::Report.configuration.csv_options.merge(csv_options)
    @data_options = Lite::Report.configuration.data_options.merge(data_options)
    @import_options = Lite::Report.configuration.import_options.merge(import_options)
  end

  class << self

    def export(data, csv_options: {}, data_options: {}, import_options: {})
      klass = new(
        data,
        csv_options: csv_options,
        data_options: data_options,
        import_options: import_options
      )

      klass.export
    end

    def import(data, csv_options: {}, data_options: {}, import_options: {})
      klass = new(
        data,
        csv_options: csv_options,
        data_options: data_options,
        import_options: import_options
      )

      klass.import
    end

  end

  private

  def values!(row)
    case row.class.name
    when 'CSV::Row' then row.fields
    when 'Hash' then row.values
    else row
    end
  end

end