class Admin::Legacy::Service::FamiliesController < Admin::Legacy::Service::Controller
  def index
    data = families.map do |id, name|
      name = encode_string_to_utf8(name)
      props = props(id)
      props[:id] = id
      props[:name] = name
      props
    end
    render_success :ok, json: data
  end

  def statistics
    data = current_school.families.find_by(id: params[:id]).service_logs
      .by_school_year(current_school_year)
      .group(:status)
      .sum(:hours)
    render_success :ok, json: {
      approved: data['approved'] || 0,
      pending: data['pending'] || 0,
      denied: data['denied'] || 0
    }
  end

  private
    def families
      current_school.families.current_status(params[:status]&.to_sym).pluck(:id, :name)
    end

    def requirement
      @requirement ||= current_school.find_or_build_service_requirement.family_hours
    end

    def approved_hours
      @approved_hours ||= current_school.service_family_logs
        .by_school_year(current_school_year)
        .approved
        .group(:family_id)
        .sum(:hours)
    end

    def pending_hours
      @pending_hours ||= current_school.service_family_logs
        .by_school_year(current_school_year)
        .pending
        .group(:family_id)
        .sum(:hours)
    end

    def props(id)
      percentage = (approved_hours[id] || 0) / requirement * 100 if requirement.positive?

      {
        approved: approved_hours[id] || 0,
        pending: pending_hours[id] || 0,
        percentage: percentage
      }
    end
end
