'use strict';

import ReactNative from 'react-native';
import CategoryBService from '../../services/CategoryBService';
import Immutable, {Map} from 'immutable';
const {
	SET_TYPE,

    GET_CATEGORY_B_LIST_REQUEST,
    GET_CATEGORY_B_LIST_SUCCESS,
    GET_CATEGORY_B_LIST_FAILURE,

    GET_CATEGORY_B_SUBDETAIL_REQUEST,
    GET_CATEGORY_B_SUBDETAIL_SUCCESS,
    GET_CATEGORY_B_SUBDETAIL_FAILURE,

	SET_CURRENT_CATEGORY_B,
	SET_CURRENT_CHANNEL_B,

	SET_CURRENT_CATEGORY_B_SUBDETAIL_FROM_CACHE,

	JUMP_TO_CATEGORY,

} = require('../../constants/actionTypes').default;

export function getCategoryBList(channel_id) {
	return (dispatch, getState) => {
		let {app, classify} = getState();

		dispatch(getCategoryBListRequest());

		return new CategoryBService(app.host).getCategoryBList()
        .then(json => {
			dispatch(getCategoryBListSuccess(json));

			dispatch(getCategoryBFirstSubCategoryDetail(channel_id));
		})
		.catch(error => {
			dispatch(getCategoryBListFailure());
		});
	};
}


export function selectCategoryB(category){
	return (dispatch, getState) => {
		let {categoryB} = getState();

		let categoryId = category.category_id;
        let categoryValue = category.category_name;

        if(category.sub && category.sub.length > 0){
        	dispatch(getCategoryBSubCategoryDetail(categoryId, categoryValue));
        }
        else{
        	let all = {
	            category_name: "全部" + categoryValue,
	            parent_id: categoryId,
	            relation_parameter: category.relation_parameter,
	            node_count: category.node_count,
	        };
	        //设置当前的类别信息
        	dispatch(setCurrentCateB(categoryId, categoryValue));
	        dispatch(jumpToCategory(all, 0, categoryB.currentChannelId));      
        }
	};
}

/**
 *  点击More事件
 **/
export function pressCategoryBMore(category_id){
	return (dispatch, getState) => {
		let {categoryB} = getState();

		//获取当前频道下一级分类列表信息
		let categoryData = categoryB.categoryList.get(categoryB.currentChannelValue);

		//获取指定category_id分类信息
		let category = null; 
		categoryData.map((item, i) => {
			if(category_id == item.get('category_id')){
				category = item;
			}
		});

    	let all = {
            category_name: "全部" + (category ? category.get('category_name') : ""),
            parent_id: category_id,
            relation_parameter: category ? category.get('relation_parameter') : {},
            node_count: category ? category.get('node_count') : 0,
        };

        		console.log("chenlin", JSON.stringify(all));

        //设置当前的类别信息
    	dispatch(setCurrentCateB(category_id, category.get('category_name')));
        dispatch(jumpToCategory(all, 0, categoryB.currentChannelId));
        
	};
}


/**
 * 获取子分类的数据,逻辑上先判断缓存数据是否存在,不存在则从网络获取
 **/
export function getCategoryBSubCategoryDetail(category_id, category_value){

	return (dispatch, getState) => {

		let {categoryB} = getState();

		let currentChannelId = categoryB.currentChannelId;

		//检查缓存是否存在数据,如果不存在则获取
        let cache = categoryB.cacheSubCateData;
        let key = getSubDetailCacheKey(currentChannelId, category_id);
        let categoryData = cache.get(key);

        //设置当前的类别信息
        dispatch(setCurrentCateB(category_id, category_value));

		//未命中,访问网络数据
        if (!categoryData) {
            dispatch(getCategoryBSubDetail(currentChannelId, category_id));
        }
        //已命中,展示缓存数据
        else{
            dispatch(getCategoryBSubDetailFromCache(categoryData));
        }

	};
}

/**
 *	获取子分类的KEY值
 **/
function getSubDetailCacheKey(channel_id, category_id){
	let key = "CHA_" + channel_id + "_CAT_" + category_id;
	return key;
}


/**
 * 网络获取子分类的数据
 **/
export function getCategoryBSubDetail(channel_id, category_id) {
	return (dispatch, getState) => {
		let {app, categoryB} = getState();

		//各频道固定资源位
		let content_code = '';
		if(channel_id == '1'){
			content_code = 'daaa8b1a5103a30419ebd79c06e6feac';
		}
		else if(channel_id == '2'){
			content_code = '1a18449fa785631b302dc6d27388bf93';
		}
		else if(channel_id == '3'){
			content_code = '591152bee9fddcb0b4f793aa38304cb5';
		}
		else if(channel_id == '4'){
			content_code = 'e823582db5ead63c82e0d348c4e6a6bb';
		}

		dispatch(getCategoryBSubDetailRequest());

		return new CategoryBService(app.host).getCategoryBSubDetail(channel_id, category_id, content_code)
        .then(json => {
        	let payload = parseCategoryBSubDetail(channel_id, category_id, json, categoryB);
			dispatch(getCategoryBSubDetailSuccess(payload));
		})
		.catch(error => {
			dispatch(getCategoryBSubDetailFailure());
		});
	};
}

/**
 *获取指定channel的第一个分类数据
 **/
export function getCategoryBFirstSubCategoryDetail(channel_id) {

	return (dispatch, getState) => {
		let {categoryB} = getState();

		let categoryList = categoryB.categoryList;

		let category = null;
		if(channel_id == '1'){
			category = categoryList.get('boy').get(0);
		}
		else if(channel_id == '2'){
			category = categoryList.get('girl').get(0);
		}
		else if(channel_id == '3'){
			category = categoryList.get('kids').get(0);
		}
		else if(channel_id == '4'){
			category = categoryList.get('lifestyle').get(0);
		}
		dispatch(getCategoryBSubCategoryDetail(category.get('category_id'), category.get('category_name')));
	};
}


/**
 *在子分类的数据尾部添加一个MORE,因为需要获取relation_parameter 和 node_count数据,所以不得不从分类列表中筛选找出
 **/
function parseCategoryBSubDetail(channel_id, category_id, subcategory_data, props_data) {
	if(!subcategory_data || !props_data){
		return;
	}

	// 暂时不添加MORE,陈林修改 2017.1.13
	// //分类信息不为空时,添加more
	// if(subcategory_data.sortInfo && subcategory_data.sortInfo.length > 0){

	// 	//获取当前频道下一级分类列表信息
	// 	let categoryData = props_data.categoryList.get(props_data.currentChannelValue);

	// 	//获取指定category_id分类信息
	// 	let category = null; 
	// 	categoryData.map((item, i) => {
	// 		if(category_id == item.get('category_id')){
	// 			category = item;
	// 		}
	// 	});

	// 	let more = {
 //            show_category_name: 'MORE',
 //            category_name: "全部" + (category ? category.get('category_name') : ''),
 //            parent_id: category_id,
 //            relation_parameter: category ? category.get('relation_parameter') : {},
 //            node_count: category ? category.get('node_count') : 0,
 //            data_type:'text',
 //        };


	// 	subcategory_data.sortInfo.push(more);
	// }

	let key = getSubDetailCacheKey(channel_id, category_id);

	return {key: key, data: subcategory_data};

}


export function getCategoryBListRequest() {
    return {
        type: GET_CATEGORY_B_LIST_REQUEST,
    };
}

export function getCategoryBListSuccess(json) {
    return {
        type: GET_CATEGORY_B_LIST_SUCCESS,
        payload: json
    }
}

export function getCategoryBListFailure(error) {
    return {
        type: GET_CATEGORY_B_LIST_FAILURE,
        payload: error
    }
}

export function getCategoryBSubDetailRequest() {
    return {
        type: GET_CATEGORY_B_SUBDETAIL_REQUEST,
    };
}

export function getCategoryBSubDetailSuccess(json) {
    return {
        type: GET_CATEGORY_B_SUBDETAIL_SUCCESS,
        payload: json
    }
}

export function getCategoryBSubDetailFailure(error) {
    return {
        type: GET_CATEGORY_B_SUBDETAIL_FAILURE,
        payload: error
    }
}


export function setCurrentCateB(categoryId, categoryValue){
	return {
        type: SET_CURRENT_CATEGORY_B,
        payload: {id: categoryId, value : categoryValue}
    }
}

export function setCurrentChannelB(channelId, channelValue){
	return {
        type: SET_CURRENT_CHANNEL_B,
        payload: {id: channelId, value : channelValue}
    }
}

export function getCategoryBSubDetailFromCache(categoryData) {
	return {
        type: SET_CURRENT_CATEGORY_B_SUBDETAIL_FROM_CACHE,
        payload: categoryData
    }
}


export function jumpToCategory(value, index, channelId){
	ReactNative.NativeModules.YH_CommonHelper.jumpToCategory(value, parseInt(index), parseInt(channelId));
	return {
        type: JUMP_TO_CATEGORY,
        payload: value
    }
}


function dataExposure(json) {
	return (dispatch, getState) => {
		if (!json) {
			return;
		}

		let {boy, girl, kids, lifestyle} = json;

		let newBoy = [];
		let newGirl = [];
		let newKids = [];
		let newLifestyle = [];

		boy.map((item, i) => {
			let subList = [];
			item.sub && item.sub.map((sub, k) => {
				subList.push({
					I_INDEX: k + 1,
					CAT_ID: sub.category_id,
				});
			});

			newBoy.push({
				I_INDEX: i + 1,
				CAT_ID: item.category_id,
				SUBLIST: subList,
			});
		});

		girl.map((item, i) => {
			let subList = [];
			item.sub && item.sub.map((sub, k) => {
				subList.push({
					I_INDEX: k + 1,
					CAT_ID: sub.category_id,
				});
			});

			newGirl.push({
				I_INDEX: i + 1,
				CAT_ID: item.category_id,
				SUBLIST: subList,
			});
		});

		kids.map((item, i) => {
			let subList = [];
			item.sub && item.sub.map((sub, k) => {
				subList.push({
					I_INDEX: k + 1,
					CAT_ID: sub.category_id,
				});
			});

			newKids.push({
				I_INDEX: i + 1,
				CAT_ID: item.category_id,
				SUBLIST: subList,
			});
		});

		lifestyle.map((item, i) => {
			let subList = [];
			item.sub && item.sub.map((sub, k) => {
				subList.push({
					I_INDEX: k + 1,
					CAT_ID: sub.category_id,
				});
			});

			newLifestyle.push({
				I_INDEX: i + 1,
				CAT_ID: item.category_id,
				SUBLIST: subList,
			});
		});


		let params = {
			YH_AppChannelBoy: newBoy,
			YH_AppChannelGirl: newGirl,
			YH_AppChannelKid: newKids,
			YH_AppChannelLifeStyle: newLifestyle,
		};

		// console.log(params);

		ReactNative.NativeModules.YH_CommonHelper.logEvent('YB_SHOW_CATEGORY', params);
	};
}