class Admin::Admissions::Families::ApplicantPaymentsController < Admin::Admissions::Controller
  include Admin::Admissions::FamilyScoped

  def index
    render_success :ok, json: payments.includes(:application).map { |p| payment_props(p) }
  end

  def update
    if payment.update(payment_params)
      render_success :ok, json: payment_props(payment)
    else
      render_error :unprocessable_entity, errors: payment
    end
  end

  private
    def school_year
      @school_year ||= current_school.school_years.find_by(id: params[:school_year_id])
    end

    def payments
      query = school_year.admission_applicants
        .where(family: family)
        .joins(:application)

      query.where(admission_applications: { payment: true })
        .or(query.by_payment_paid(false))
    end

    def payment
      @payment ||= payments.find_by(id: params[:id])
    end

    def payment_params
      params.permit(:payment_status)
    end

    def payment_props(payment)
      {
        id: payment.id,
        full_name: payment.full_name(:reverse),
        description: payment.payment_description || payment.application.payment_description,
        amount: payment.payment_amount || payment.application.payment_amount,
        paid_at: payment.paid_at,
        status: payment.payment_status
      }
    end
end
