AutomobileSizeClassYear.class_eval do
  data_miner do
    schema Earth.database_options do
      string  'name'
      string  'size_class_name'
      integer 'year'
      string  'type_name'
      float   'fuel_efficiency_city'
      string  'fuel_efficiency_city_units'
      float   'fuel_efficiency_highway'
      string  'fuel_efficiency_highway_units'
    end
    
    import "automobile size class year fuel efficiencies from the 2010 EPA Fuel Economy Trends report",
           :url => 'https://spreadsheets.google.com/pub?key=0AoQJbWqPrREqdDZOLWdDdlZja04xZkJYc3NjeGxQamc&hl=en&gid=0&output=csv' do
      key 'name'
      store 'size_class_name'
      store 'year'
      store 'type_name'
      store 'fuel_efficiency_city', :units_field_name => 'fuel_efficiency_city_units'
      store 'fuel_efficiency_highway', :units_field_name => 'fuel_efficiency_highway_units'
    end
    
    # FIXME TODO verify that size_class_name is never missing?
    # FIXME TODO verify that type_name appears in AutomobileTypeFuelYearAges
    
    verify "Year should be from 1975 to 2010" do
      AutomobileSizeClassYear.all.each do |record|
        unless record.year > 1974 and record.year < 2011
          raise "Invalid year for AutomobileSizeClassYear #{record.name}: #{record.year} (should be from 1975 to 2010)"
        end
      end
    end
    
    verify "Fuel efficiencies should be greater than zero" do
      AutomobileSizeClassYear.all.each do |year|
        %w{ fuel_efficiency_city fuel_efficiency_highway }.each do |attribute|
          value = year.send(:"#{attribute}")
          unless value > 0
            raise "Invalid #{attribute} for AutomobileSizeClassYear #{year.name}: #{value} (should be > 0)"
          end
        end
      end
    end
    
    verify "Fuel efficiency units should be kilometres per litre" do
      AutomobileSizeClassYear.all.each do |year|
        %w{ fuel_efficiency_city_units fuel_efficiency_highway_units }.each do |attribute|
          value = year.send(:"#{attribute}")
          unless value == "kilometres_per_litre"
            raise "Invalid #{attribute} for AutomobileSizeClassYear #{year.name}: #{value} (should be kilometres_per_litre)"
          end
        end
      end
    end
  end
end