class EdFi::Indiana::V2026::DescriptorService < EdFi::Indiana::V2026::ApplicationService
  include EdFi::IndianaHelper
  include CacheHelper

  def call
    load_cache(redis_path) do
      @limit = 100
      offset = 0
      data = []

      loop do
        response = RestClient.get(url, headers.merge(params: query_params(offset))).body
        parsed = JSON.parse(response)
        break if parsed.empty?

        data += parsed
        offset += @limit
      end

      data.to_json
    end
  end

  private
    def endpoint
      # Using EdFi::IndianaHelper#namespace
      "#{namespace(@params[:descriptor].to_s)}/#{@params[:descriptor]}"
    end

    def redis_path
      path = "edfi/indiana/#{environment}/#{school_year.academic_year}/#{@params[:descriptor]}"
      return path if @params[:query].blank? || @params[:values].blank?

      "#{path}/#{@params[:query]}/#{@params[:values]}"
    end

    def query_params(offset)
      query = { offset: offset, limit: @limit }
      return query if @params[:query].blank? || @params[:values].blank?

      props = @params[:query].split(',')
      values = @params[:values].split(',')
      props.zip(values).to_h.each do |prop, value|
        next if prop.blank? || value.blank?

        query.merge!(prop => value)
      end

      query
    end
end
