/**
 * admin/platform
 */
var mcare_admin_platform = function(){
	//상속
	mcare_admin.call(this);
	
	var self = this;
	//변수
	var $search = $("#search"),
		$endDate = $("#endDate"),
		$strDate = $("#strDate"),
		$selectOption = $("#select-option"),
		$chart = $("#chart"),
		$legend = $("#chart_legend"),
		$grid = $("#grid"),
		$crudServiceBaseUrl = contextPath + "/admin/stats";
	/**
	 * 초기화
	 */	
	this.init = function(){
		initDatePicker();
		initDropDownList();
		initGrid();
		//initChart();
		addEvent();
	};
	/**
	 * 이벤트 등록
	 */
	var addEvent = function(){
		// 검색 이벤트
		$search.on( "click",function(e){
			//mcare_admin
			self.search( dataSource, false );
		});
	};
	/**
	 * datapicker 초기화
	 */
	var initDatePicker = function(){
		//mcare_admin
		self.datePicker( $endDate, $strDate, $selectOption );
	};
	/**
	 * 검색조건 dropdown 초기화
	 */
	var initDropDownList = function(){
		// mcare_admin
		self.dropDownList( $selectOption );
	};
	
	// 데이타소스
	var pieData = {};
	/**
	 * 데이터소스 설정
	 */
	var setDataSource = function(){
		
		var dataSource = new kendo.data.DataSource({
			transport: {
				read: {
					url: $crudServiceBaseUrl + "/getPlatformList.json",
					method: "post",
					dataType: "json",
					contentType: "application/json"
				},
				parameterMap: getParameterMap
			},
			schema: {
				data : getSchemaData
			}
		});
		/**
		 * 데이터소스 파라미터맵
		 * @private
		 */
		function getParameterMap( options, operation ){
			var param = $.extend(true, {}, options, {
				strDate : new Date( self.getStartDatePickerValue() ).setHours(0, 0, 0, 0),
				endDate : new Date( +self.getEndDatePickerValue() ).setHours(0, 0, 0, 0),
			}, null);
			return self.util.stringifyJson( param );
		};
		/**
		 * 데이터소스 스키마설정
		 * @private
		 */
		function getSchemaData(e){
			if( e.msg !== undefined ){
				alert(e.msg);
				return [];
			}
			var aggPlatformList = e.aggPlatformList;
			
			var userOrdArr = new Array(),
			userCntArr = new Array(),
			platformArr = new Array(),
			totalCount = 0;
			
			//내려온 데이터 순서대로 
			for( var n = 0 ; n < aggPlatformList.length ; n ++ ) {
				//순위 배열
				userOrdArr.push( n+1 );
				//플랫폼 타입 배열
				platformArr.push( aggPlatformList[n].platformType );
				//방문횟수 배열
				userCntArr.push( aggPlatformList[n].hitCnt );
				//비율을 위한 전체 횟수
				totalCount += aggPlatformList[n].hitCnt;
			}
			
			var percentage = new Array();
			
			for( var n = 0 ; n < userCntArr.length ; n ++ ) {
				 var cnt = userCntArr[n]/totalCount*100,
				 str_per = ( Math.round(cnt*100) ) / 100;
				 //비율 계산해서 비율 배열에 넣기
				 percentage.push( str_per );
				 //플랫폼 타입을 key로 비율값 value - 차트를 위해서
				 pieData[ platformArr[n] ] = str_per;
			}
			
			var param = [];
			for( var n = 0, size = platformArr.length ; n < size ; n ++ ) {
				param.push({
					"userOrdArr" : userOrdArr[n],
					"platformType" : platformArr[n],
					"hitCnt" : userCntArr[n],
					"percentage" : percentage[n],
				});
			}
			
			return param;
		};
		return dataSource;
	};
	var dataSource = setDataSource();
	/**
	 * 그리드 초기화
	 */
	var initGrid = function(){
		// 그리드 옵션
		var option = {
			dataSource: dataSource,
			//그리드 데이터 받아온 뒤 차트 초기화
			dataBound: initChart,
	        pageable: false,
	        selectable: true,
	        height : 215,
	        columns : [
	        	{
	        		field : "userOrdArr",
	        		title : "No.",
	        		width: 80,
	        		template: "#:data.userOrdArr#",
	        		attributes: {
				      "class": "table-cell",
				      style: "text-align: center;"
				    }
	        	},
	        	{
	        		field : "platformType",
	        		title : "플랫폼 타입",
	        		width: 320,
	        		attributes: {
				      "class": "table-cell",
				      style: "text-align: center;"
				    }
	        	},
	        	{
	        		field : "hitCnt",
	        		title : "방문횟수",
	        		width: 320,
	        		template: "#= kendo.toString(data.hitCnt,'n0')# 건",
	        		attributes: {
				      "class": "table-cell",
				      style: "text-align: center;"
				    }
	        	},
	        	{
	        		field : "percentage",
	        		title : "비율",
	        		width: 320,
	        		template: "#:data.percentage# %",
	        		attributes: {
				      "class": "table-cell",
				      style: "text-align: center;"
				    }
	        	}
	        ]
	    };
		//그리드 초기화 mcare_admin
		self.grid( $grid, option );
	};
	/**
	 * 차트 초기화
	 */
	var initChart = function(){
	
    	var data = setChartData( pieData );
    	
    	//데이터 없으면 차트 표시하지 않기
    	if( data.length === 0 ){
    		var cl = setColor();
    		data.push({
				 value : 0,
				 label : "데이터없음",
				 color : cl,
				 highlight : cl
			});
    	}

		var option = {
				tooltipTemplate: "<%= value %>%"
		};
		//차트 초기화 mcare_admin
		self.chart( $chart, "pie", option, data, $legend );
		
		function setChartData( data ){
			var restore = [];
			for( var key in data ) {
				 var cl = setColor();
				 var item = {
					 value : data[key],
					 label : key,
					 color : cl,
					 highlight : cl
				 };
				 restore.push( item );
			}
			
			return restore;
		}
		
		function setColor( ){
			var colorArr = [
			       "#F7464A","#46BFBD","#FDB45C" ,"#FFC870",
			       "#008000","#3f0080","#800040","#007f80","#7f8000",
			       "#804000","#003f80","#800000","#801900","#ff007f",
			       "#4c8000","#00804c","#001980","#ff0000","#00ff66","#00ff7f",
			       "#7f00ff","#feff00","#003fff","#00ffef","#7fffd4",
			       "#4b0082","#087830","#3200ff","#7fff00","#0000ff"
			];
			var random = Math.floor( Math.random() * ( (colorArr.length-1) + 1 ) );
			
			return colorArr[random];
		}
	};
};