module ImportRepository
  class ParseRepository
    include ActionView::Helpers::TextHelper
    def initialize(options)
      @file = options.fetch(:file)
      @repository = options.fetch(:repository)
      @session = options.fetch(:session)
      @sheet = SpreadsheetParser.open_spreadsheet(@file)
    end

    def data
      header, columns = SpreadsheetParser.first_two_rows(@sheet)
      # Fill in fields for dropdown
      @repository.importable_repository_fields.transform_values! do |name|
        truncate(name, length: Constants::NAME_TRUNCATION_LENGTH_DROPDOWN)
      end
      Data.new(header,
               columns,
               @repository.importable_repository_fields,
               @repository)
    end

    def too_large?
      @file.size > Rails.configuration.x.file_max_size_mb.megabytes
    end

    def has_too_many_rows?
      @sheet.last_row > Constants::IMPORT_REPOSITORY_ITEMS_LIMIT
    end

    def generate_temp_file
      # Save file for next step (importing)
      temp_file = TempFile.new(
        session_id: @session.id,
        file: @file
      )

      if temp_file.save
        TempFile.destroy_obsolete(temp_file.id)
        return temp_file
      end
    end

    Data = Struct.new(
      :header, :columns, :available_fields, :repository
    )
  end
end