class Admin::StateReporting::ErrorLogsController < Admin::StateReporting::Controller
  def index
    render_success :ok, json: logs.map { |l| log_props(l) }.compact
  end

  def counts
    render_success :ok, json: card_error_counts
  end

  private
    def logs
      @logs ||= current_school_year.ed_fi_logs
        .by_endpoints(params[:types])
        .where.not(status_code: nil)
        .where('status_code < 500')
        .ordered
    end

    def students_by_edfi_id
      @students_by_edfi_id ||= current_school_year.school_year_students.index_by(&:edfi_id)
    end

    def endpoint_mapping
      @endpoint_mapping ||= EdFi::Log::ENDPOINT_MAPPING
    end

    def log_props(log)
      return if log.associated.nil? || log.message.nil?

      {
        id: log.id,
        school_year_id: log.school_year_id,
        endpoint: log.endpoint,
        message: log.message,
        title: log.decorate.title,
        created_at: log.created_at.to_date
      }
    end

    def card_error_counts
      card_error_counts = []
      params[:types].each do |card|
        value = 0
        endpoint_mapping[card.to_sym].each do |endpoint|
          value += error_counts[endpoint.to_s] || 0
        end
        card_error_counts.push({ card: card, value: value })
      end
      card_error_counts
    end

    def error_counts
      @error_counts ||= logs.group(:endpoint).count
    end
end
