class Income < ApplicationRecord
  scope :by_designation, -> { all.map { |income| [income.designation, income] }.to_h }
  scope :by_slug, -> { all.map { |income| [income.slug, income] }.to_h }

  include FriendlyId

  friendly_id :designation, use: [:slugged]

  def self.to_designation(income)
    return "Economically Disadvantaged - N" if income.blank? or income.nil?

    case income
    in /Free\s*Lunch|Reduced\s*Lunch|Low\s*Income|Reduced\s*price\s*lunch|true|1|^Yes$/i
      "Economically Disadvantaged - Y"
    in /Not\s*Eligible|false|0|^No$/i
      "Economically Disadvantaged - N"
    in %r{^#*N/*A$|Unknown|Income}i
      "Unknown"
    else
      puts "************************************"
      puts "********      ERROR       **********"
      puts ""
      puts "Error parsing Income column. '#{income}' is not a known value. Halting execution"
      puts ""
      puts "************************************"
      exit
    end
  end

  LABELS = {
    "Economically Disadvantaged - Y" => "Economically Disadvantaged",
    "Economically Disadvantaged - N" => "Not Economically Disadvantaged",
    "Unknown" => "Unknown"
  }

  def label
    LABELS[designation]
  end
end
