class Family::Legacy::Service::StudentLogsController < Family::Controller
  include Shared::Legacy::Service::StudentLogsScoped

  def index
    render_success :ok, json: logs.order(datetime: :desc).map { |l| log_props(l) }
  end

  def statistics
    data = logs
      .by_student_ids(params[:student_id])
      .group(:status)
      .sum(:hours)
    render_success :ok, json: {
      approved: data['approved'] || 0,
      pending: data['pending'] || 0,
      denied: data['denied'] || 0
    }
  end

  def create
    log = logs.build(log_params)
    if log.save
      render_success :ok, json: log_props(log)
    else
      render_error :unprocessable_entity, errors: log
    end
  end

  def update
    if log.update(log_params)
      render_success :ok, json: log_props(log)
    else
      render_error :unprocessable_entity, errors: log
    end
  end

  def destroy
    if log.destroy
      render_success :ok
    else
      render_error :unprocessable_entity, errors: log
    end
  end

  private
    def logs
      current_family.student_service_logs.by_school_year(current_school_year)
    end

    def log
      @log ||= logs.find_by(id: params[:id])
    end

    def opportunity
      @opportunity ||= current_school.service_opportunities
        .find_by(id: params[:opportunity_id])
    end

    def log_params
      params.permit(:hours, :notes, :datetime).merge(set_associations)
    end
end
