	

    '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
    ]

