class EdFi::DigitalEquityDecorator < ApplicationDecorator
  def internet_access_name
    return if internet_access_descriptor.nil?

    internet_access_descriptor? ? 'Yes' : 'No'
  end

  def barrier_internet_access_name
    descriptor_service(:barrier_internet_access_descriptor)
  end

  def internet_access_type_name
    descriptor_service(:internet_access_type_descriptor)
  end

  def internet_performance_name
    descriptor_service(:internet_performance_descriptor)
  end

  def device_away_name
    descriptor_service(:device_away_descriptor)
  end

  def device_provider_name
    descriptor_service(:device_provider_descriptor)
  end

  def device_access_name
    descriptor_service(:device_access_descriptor)
  end

  private
    def descriptor_prop_mapping
      {
        barrier_internet_access_descriptor: :barrierToInternetAccessInResidenceDescriptors,
        internet_access_type_descriptor: :internetAccessTypeInResidenceDescriptors,
        internet_performance_descriptor: :internetPerformanceInResidenceDescriptors,
        device_away_descriptor: :primaryLearningDeviceAwayFromSchoolDescriptors,
        device_provider_descriptor: :primaryLearningDeviceProviderDescriptors,
        device_access_descriptor: :primaryLearningDeviceAccessDescriptors
      }
    end

    def descriptor_service(prop)
      return if object[prop].blank?

      descriptor = EdFi::Wisconsin::DescriptorService
        .call(student.school.current_year.id, descriptor: descriptor_prop_mapping[prop])
        .find { |d| d['id'] == object[prop] }

      descriptor ? descriptor['codeValue'] : nil
    end
end
