'use strict'
angular.module 'SocialSystem'
.controller 'QuestionCtrl', ['$scope', '$rootScope', '$state', '$stateParams', '$document', 'Quiz', '$splash', 'Config', ($scope, $rootScope, $state, $stateParams, $document, Quiz, $splash, Config) ->
$scope.questionIndex = $stateParams['index'] - 1
$state.go 'list' if $stateParams['index'] < 1
$scope.sortableOptions =
disabled: true
getQuiz = () ->
$scope.quiz = Quiz.getQuiz()
$scope.sortableOptions.disabled = $scope.quiz.questions[$scope.questionIndex].is_answered if not $.isEmptyObject $scope.quiz
validateMissing = (questionId) ->
validation = for answer in $scope.quiz.questions[questionId].answers
do (answer)->
switch answer.pattern.split(':')[1]
when 'number' then [answer.user_text, 'number', /^\d+$/.test answer.user_text]
when 'cyrillic' then [answer.user_text, 'cyrillic', /[\u0400-\u04FF]/gi.test answer.user_text]
validationErrMsg = (entry, values) ->
Config.messages.validate_errors.text.replace('[entry]', '"'+entry+'"').replace('[values]', Config.messages.validate_errors[values])
errors = []
(errors.push validationErrMsg(row[0], row[1]) if row && row[2] is false) for row in validation
if errors.length > 0
errors
else
null
getQuiz()
$rootScope.$on 'quiz:updated', ->
getQuiz()
$scope.disableSendBtn = false
$scope.$on 'answers:sent', ->
$scope.quiz.questions[$stateParams['index'] - 1].is_answered = true
$scope.disableSendBtn = false
$rootScope.$on 'answers:sent', undefined
$state.go 'list'
$scope.send = () ->
unless $scope.quiz.questions[$scope.questionIndex].is_answered
$scope.disableSendBtn = true
switch $scope.quiz.questions[$scope.questionIndex].type_id
when 'single_choice' then userAnswer = (answer.id for answer in $scope.quiz.questions[$scope.questionIndex].answers when answer.user_choice)
when 'multi_choice' then userAnswer = (answer.id for answer in $scope.quiz.questions[$scope.questionIndex].answers when answer.user_choice)
when 'order' then userAnswer = (answer.id for answer in $scope.quiz.questions[$scope.questionIndex].answers)
when 'compare' then userAnswer = (
[answer.id, $scope.quiz.questions[$scope.questionIndex].answers.relation[i].id] for answer, i in $scope.quiz.questions[$scope.questionIndex].answers.main by 1
)
when 'missing' then userAnswer = ([answer.id, answer.user_text] for answer in $scope.quiz.questions[$scope.questionIndex].answers)
when 'word' then userAnswer = [$scope.quiz.questions[$scope.questionIndex].answers.user_text]
emptyCount = 0
(emptyCount++ if answer[1] is '') for answer in userAnswer
if userAnswer.length == 0 or emptyCount > 0 or userAnswer.length == 1 && userAnswer[0] == ''
$splash.open
title: Config.messages.empty_answer.title,
message: Config.messages.empty_answer.text
$scope.disableSendBtn = false
else if $scope.quiz.questions[$scope.questionIndex].type_id == 'missing' && errors = validateMissing($scope.questionIndex)
$splash.open
title: Config.messages.validate_errors.title,
message: errors.join ' '
$scope.disableSendBtn = false
else
Quiz.sendAnswers $scope.quiz.questions[$scope.questionIndex].id, userAnswer
]