class SchoolAdditionalId < AdditionalId
  enum code: {
    school: 0,
    district: 1,
    federal: 2,
    nces: 3,
    act: 4,
    ceeb: 5,
    lea: 6
  }

  attr_accessor :skip_sync

  belongs_to :school, foreign_key: :associated_id, inverse_of: :additional_ids

  after_save :sync_legacy_ids, unless: :skip_sync

  before_destroy :remove_legacy_ids

  validates :code, uniqueness: { scope: :associated_id }

  private
    def sync_legacy_ids
      case code.to_sym
      when :school
        school.update(legacy_state_id: number)
      when :district
        school.update(district_code: number)
      when :federal
        school.update(federal_code: number)
      end
    end

    def remove_legacy_ids
      case code.to_sym
      when :school
        school.update(legacy_state_id: nil)
      when :district
        school.update(district_code: nil)
      when :federal
        school.update(federal_code: nil)
      end
    end
end
