class Family::FinancialAid::DocumentsController < Family::Controller
  def index
    render_success :ok, json: files.map { |f| props(f) }
  end

  def create
    if params[:files]
      params[:files].each { |f| file_area.attach(f) }
      render_success :ok
    else
      render_error :unprocessable_entity, json: application
    end
  end

  def destroy
    file.purge
    render_success :ok
  end

  private
    def current_admission_year
      current_school.find_or_build_admission_config.school_year
    end

    def application
      @application ||= current_family.financial_aid_applications
        .find_or_initialize_by(school_year: current_admission_year)
    end

    def file_relationships
      {
        income_files: :income,
        fixed_expense_files: :fixed_expenses,
        variable_expense_files: :variable_expenses,
        debt_files: :debt,
        asset_files: :assets,
        retirement_fund_files: :retirement_funds
      }
    end

    def file_area
      application.send("#{params[:area].singularize}_files")
    end

    def files
      return file_area.attachments if params[:area]

      file_relationships.keys.flat_map { |relation| application.send(relation).attachments }
    end

    def file
      file_area.find_by(id: params[:id])
    end

    def props(file)
      {
        id: file.id,
        filename: file.filename,
        url: file.service_url,
        area: file_relationships[file.name.to_sym]
      }
    end
end
