#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
#
# アンケートトップ
#

require 'al_form'
require 'al_template'
require './enquete'


class AlController
  
  ##
  # デフォルト動作
  #
  #@note
  # 念のためセッション変数を全て消去してから、デフォルト画面を表示
  #
  def action_index()
    session.delete_all()
    @enquete = Enquete.create_by_posted_id()

    # ID指定なし (or Error)
    if ! @enquete
      AlTemplate.run( 'v_index.rhtml' )
      return
    end

    # ID指定あり、回答モード
    @form = @enquete.make_form()
    check_active()
    AlTemplate.run( "v_enquete_form.rhtml" )
  end


  ##
  # 確認画面
  #
  #@note
  # フォームから送られた値を確認し、
  # OKならセッションに保存した上で、確認画面を表示する。
  # NGならデフォルトフォームに戻す。
  #
  def action_confirm
    @enquete = Enquete.create_by_posted_id()
    return  if ! @enquete

    @form = @enquete.make_form()
    if ! check_active()
      AlTemplate.run( "v_enquete_form.rhtml" )
      return
    end

    if @form.validate()
      session[:values] = @form.values
      AlTemplate.run( 'v_enquete_confirm.rhtml' )
    else
      AlTemplate.run( "v_enquete_form.rhtml" )
    end
  end


  ##
  # 確認画面で、「はい」を選ばれた場合の動作
  #
  def action_commit()
    @enquete = Enquete.new
    return  if ! @enquete.read( session[:values] )

    @enquete.save_answer( session[:values] )
    AlTemplate.run( 'v_enquete_commit.rhtml' )
    session.delete_all()
  end


  ##
  # 確認画面で、「いいえ」を選ばれた場合の動作
  #
  #@note
  # セッションから変数を戻した上でフォームにセットし直し、入力画面に戻す。
  #
  def action_cancel()
    @enquete = Enquete.new
    return if ! @enquete.read( session[:values] )
    @form = @enquete.make_form()

    @form.set_values( session[:values] )
    AlTemplate.run( "v_enquete_form.rhtml" )
  end


  private
  ##
  # アンケートが回答可能か確認
  #@return [Boolean]    回答可否
  #@note
  # 回答不可能ならその理由を@formへ入れる作業も行う。
  #
  def check_active()
    case @enquete.enquete_title[:state]
    when "making"
      @form.add_message( "このアンケートは、ただいま作成中です。" )
      @form.add_message( "回答はできません。" )

    when "active"
      return true

    when "closed"
      @form.add_message( "このアンケートは終了しました。" )
      @form.add_message( "回答はできません。" )

    end

    return false
  end
  
end
