class Family::Legacy::Service::FamilyLogsController < Family::Controller
  def index
    render_success :ok, json: logs.order(datetime: :desc).map { |l| service_log_props(l) }
  end

  def statistics
    data = 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

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

  def update
    if log.update(log_params)
      render_success :ok, json: service_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.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 set_associations
      {}.tap do |prop|
        prop[:author] = current_user
        prop[:opportunity] = opportunity if opportunity
      end
    end

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

    def date
      params[:datetime] || Time.zone.now
    end

    def service_log_props(log)
      {
        id: log.id,
        family_id: log.family_id,
        family_name: log.family.name,
        service_log_id: log.id,
        opportunity_id: log.opportunity_id,
        opportunity_name: log.decorate.opportunity_name,
        datetime: log.datetime,
        hours: log.hours,
        notes: log.notes,
        approved: log.approved?,
        status: log.status
      }
    end
end
