class School::PublicFormsController < ApplicationController
  skip_before_action :authenticate_request!
  skip_before_action :enforce_password_reset!
  skip_before_action :enforce_terms_of_service_agreement!

  def show
    if form
      render_success :ok, json: props
    else
      render_error :not_found
    end
  end

  def create
    entry = form.entries.build
    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 form
      @form ||= Form.public_view.active.find_by(id: params[:id])
    end

    def fields
      form.fields
    end

    def school
      @school = form.school
    end

    def props
      {
        id: form.id,
        name: form.name,
        description: form.description,
        next_form_id: form.next_form_id,
        fields: fields.map { |f| field_props(f) }
      }
    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
