class School::FormsController < ApplicationController
  def index
    render_success :ok, json: forms.map { |f| props(f) }
  end

  def show
    render_success :ok, json: props(form)
  end

  def create
    entry = form.entries.build(user: current_user)
    params[:answers].each do |answer|
      a = entry.answers.build({ field_id: answer[:field_id] })
      case answer[:type].to_sym
      when :short_text
        a.short_text = answer[:value]
      when :long_text
        a.long_text = answer[:value]
      when :date
        a.date = answer[:value]
      when :checkbox
        a.checkbox = answer[:value]
      end
    end

    if entry.save
      render_success :ok
    else
      render_error :unprocessable_entity, json: entry.errors
    end
  end

  private
    def forms
      current_school.forms.active.exclude_internal(role != :employee)
    end

    def form
      @form ||= forms.find_by(id: params[:id])
    end

    def props(form)
      {}.tap do |prop|
        prop[:id] = form.id
        prop[:name] = form.name
        prop[:description] = form.description
        prop[:next_form_id] = form.next_form_id
        return prop if action_name == :index

        prop[:fields] = form.fields.map { |f| field_props(f) }
      end
    end

    def field_props(field)
      {
        id: field.id,
        type: field.type,
        label: field.label,
        help_text: field.help_text,
        content: field.content,
        length: field.length.positive? ? field.length : nil
      }
    end
end
