class Admin::StateReporting::TranscriptErrorLogsController <
  Admin::StateReporting::ErrorLogsController
  def index
    render_success :ok, json:
      transcript_logs_by_grade(params[:grades]).map { |l| log_props(l) }.compact
  end

  def counts
    render_success :ok, json: grade_counts
  end

  private
    def students
      @students ||= current_school_year.students
    end

    def preschool_descriptor
      EdFi::Descriptor.by_grade_levels(current_school).find_by(key: -3)&.key
    end

    def transcripts
      @transcripts ||= current_school_year.student_transcripts
    end

    def transcript_cards
      cards = []
      first_grade = current_school.first_grade_offered
      last_grade = current_school.last_grade_offered
      preschool_grade = current_school.grades.find { |g| g.edfi_grade == preschool_descriptor }
      cards.push('preschool') if first_grade.negative? && preschool_grade.present?
      first_grade < 6 ? cards.push('primary') : nil
      first_grade != 9 ? cards.push('middle') : nil
      last_grade > 9 ? cards.push('secondary') : nil
      cards
    end

    def transcript_logs_by_grade(cards)
      EdFi::Indiana::Sandbox::TranscriptLogsService.call(current_school_year.id, grade: cards)
    end

    def grade_counts
      grade_counts = []
      transcript_cards.each do |card|
        grade_counts.push({ card: card, value: transcript_logs_by_grade([card]).count })
      end
      grade_counts
    end
end
