frameworkModule.controller('appMultiSelectController', ['$scope', '$log',
    function ($scope, $log) {
        'use strict';
        $log.debug('appMultiSelectController.ctor()...');

        /**
         * @this-option-map: # 下拉的选项映射,
         *                   # 接受两种类型的映射,
         *                   # 1,一维数组 []
         *                   # 2,键值对对象 {}
         * @this-selected: # 最终的选项的结果,
         *                 # 以String[]类型输出给绑定的值
         *                 # 如果data-option-map绑定的是{},则输出选中的元素的key
         *                 # 如果绑定的是[],就输出选中的元素
         * @this-callback: # 如果第一时间无法获取承接选项结果的对象
         *                 # 可以传入一个回调函数,在函数里面执行赋值操作
         *                 # 回调函数的参数为@data-selected
         * @this-option-type: # 有两种渲染类型:单选-radio 复选-checkbox,默认为checkbox
         * */

        $scope.selected = $scope.thisSelected || "";
        $scope.optionMap = $scope.thisOptionMap || {};
        $scope.defaultChecked = $scope.thisDefaultChecked || [];

        $scope.callback = $scope.thisCallback || function () {};

        $scope.optionType = (function (optionType) {
            if (!optionType) {
                optionType = "checkbox";
            }
            return optionType;
        })($scope.thisOptionType);


        $scope.analysisOptionMap = function(optionMap){
            var optionKeys = [];
            var optionValues = [];
            if (Object.prototype.toString.call(optionMap) === '[object Array]') {
                optionMap.forEach(function (item,index) {
                    if(Object.prototype.toString.call(item) === '[object Object]'){
                        var thisItemObj = item;
                        var thisItemKeys = Object.keys(thisItemObj);

                        if(thisItemKeys.length > 2){
                            throw error("pmsMultiSelect组件,thisOptionMap参数传入的类型不支持,请参阅‘js/pmsComponent/pmsMultiSelec/说明文档.md’");
                        }
                        optionKeys[index] = thisItemKeys[0];
                        optionValues[index] = thisItemObj[thisItemKeys[0]];
                    }else{

                        // 如果是纯数组进来的视图,key值也绑定为value值,因为最后只会返回key值
                        optionKeys[index] = item;
                        optionValues[index] = item;
                    }
                });
            }

            if (Object.prototype.toString.call(optionMap) === '[object Object]') {
                // result = optionMap;
                Object.keys(optionMap).forEach(function(optionItemKey,optionItemIndex){
                    optionKeys[optionItemIndex] = optionItemKey;
                    optionValues[optionItemIndex] = optionMap[optionItemKey];
                });
            }
            return {
                keys: optionKeys,
                values: optionValues,
            }
        };

        $scope.optionKeys = $scope.analysisOptionMap($scope.thisOptionMap).keys;
        $scope.optionValues = $scope.analysisOptionMap($scope.thisOptionMap).values;
        $scope.checkedValues = [];
        $scope.checkedKeys = [];

        $scope.showOptionMenu = false;
    }]);