class Admin::Forms::EntriesController < Admin::Forms::Controller
  def index
    render_success :ok, json: { 
      headers: form_headers,
      items: entries.includes(:user).map { |e| props(e) } 
    }
  end

  def update
    if entry.update(entry_params)
      render_success :ok
    else
      render_error :unprocessable_entity
    end
  end

  private
    def entries
      form.entries.includes(answers: :field)
    end

    def entry
      @entry ||= entries.find_by(id: params[:id])
    end

    def entry_params
      params.permit(:verified).merge(verified_date: Time.zone.now, verifier: current_user)
    end

    def fields
      @fields ||= form.fields.is_question.order(:position)
    end

    def form_headers
      fields.map { |i| { label: i.label, field: i.id.to_s, type: i.type } }
    end

    def props(entry)
      {}.tap do |prop|
        prop[:id] = entry.id
        prop[:date] = entry.date
        prop[:name] = entry.decorate.user_full_name(:reverse)
        entry.answers.each do |answer|
          prop[answer.field.id.to_s] = if answer.field.short_text?
            answer.short_text
          elsif answer.field.long_text?
            answer.long_text
          elsif answer.field.date?
            answer.date
          elsif answer.field.checkbox?
            answer.checkbox
          end
        end
      end
    end
end
