'use strict';
const api = global.yoho.API;
const serviceAPI = global.yoho.ServiceAPI;
const helpers = global.yoho.helpers;
const _ = require('lodash');
const config = global.yoho.config;
const singleAPI = global.yoho.SingleAPI;


/**
 * 查询用户信息
 *
 * @param int uid 用户ID
 * @return Object 个人详情数据
 */
const _getUserProfileData = exports.getUserProfileData = (uid) => {
    if (!uid) {
        return Promise.resolve({});
    }

    return api.get('', {
        uid: uid,
        method: 'app.passport.profile'
    }, {
        code: 200
    }).then(result => {
        return result.data || {};
    });
};

/**
 * 个人中心页面收藏及订单等的数目数据
 *
 * @param int uid 用户ID
 * @return Object 处理之后的数据
 */
const _getInfoNumData = (uid) => {
    if (!uid) {
        return Promise.resolve({});
    }

    return api.all([api.get('', {
        uid: uid,
        method: 'app.home.getInfoNum' // 收藏及订单数目数据
    }, {
        code: 200
    }), api.get('', {
        uid: uid,
        method: 'app.address.gethidden' // 用户地址的数据
    }, {
        code: 200
    })]).then(data => {
        const res = {
            wait_pay_num: '',
            wait_cargo_num: '',
            send_cargo_num: '',
            refund_exchange_num: '',
            yoho_coin_num: ''
        };

        for (let k in data[0].data) {
            if (res[k] !== null) {
                res[k] = data[0].data[k] ? data[0].data[k] : '';
                if (k !== 'yoho_coin_num' && res[k] > 99) {
                    res[k] = '99+';
                }
            }
        }

        return Object.assign(res, {
            address_num: data[1].data && data[1].data.length ? data[1].data.length : ''
        });
    });
};

/**
 * 根据性别来决定  默认图片获取字段   如果是 2、3
 *
 * 则优先从cover_2 --》 cover_1 -- 》 images_url
 * 否则优先从cover_1 --》 cover_2 -- 》 images_url
 *
 */
const _procProductImg = (product) => {
    if (product.gender === '2,3' || product.gender === '2' || product.gender === '3') {
        return product.cover_2 || product.images_url || product.cover_1 || '';
    }

    return product.cover_1 || product.images_url || product.cover_2 || '';
};

const _processProduct = (list) => {
    let newRes = [];

    list = list || [];

    list.forEach(item => {
        let defaultGoods = _.find(item.goods_list, {is_default: 'Y'});

        // 无默认商品取商品列表第一个
        if (!defaultGoods) {
            defaultGoods = item.goods_list[0];
        }

        item.default_images = _procProductImg(defaultGoods);
        item.goodsUrl = `${config.siteUrl}/product/pro_${item.product_id}_${defaultGoods.goods_id}/${item.cn_alphabet}.html`; // eslint-disable-line
    });

    _.chunk(list, 5).forEach(item => {
        newRes.push({
            list: item
        });
    });
    return newRes;
};


/**
 * 个人中心主页数据
 *
 * @param int uid 用户ID
 * @return Object 处理之后的数据
 */
exports.getUserHomeData = (uid) => {
    return Promise.all([_getUserProfileData(uid), _getInfoNumData(uid)]);
};

/**
 * 帮助中心列表页
 *
 * @param data
 *
 */
exports.getHelpInfo = (data) => {
    let defaultParam = {
            method: 'app.help.li'
        },
        infoData = Object.assign(defaultParam, data);

    return api.get('', infoData, {
        code: 200
    }).then(result => {
        const formatData = [];
        let helpData = result.data;

        helpData = helpData || [];
        helpData.forEach(function(item) {
            formatData.push({
                name: item.caption,
                code: item.code,
                url: helpers.urlFormat('/help', {
                    id: item.code,
                    caption: item.caption,
                })
            });
        });
        return formatData;
    });
};

/**
 * 帮助中心详情页
 *
 * @param data
 */
exports.getHelpDetail = (data) => {
    let defaultParam = {
            method: 'app.help.detail',
            return_type: 'html'
        },
        detailData = Object.assign(defaultParam, data);

    return api.get('', detailData, {
        code: 200
    }).then(result => result);
};

/**
 * 保存意见反馈数据
 *
 * @param data
 */
exports.saveFeedback = (data) => {
    return serviceAPI.post('suggest/api/v1/suggest/saveSuggest', data).then(result => {
        return {
            code: result.code,
            message: result.message
        };

        // 参考接口数据
    });
};

/**
 * 保存个人信息数据
 *
 * @param data
 */
exports.saveMydetails = (params) => {
    let defaultParam = {
            method: 'app.passport.modifyBase'
        },
        data = Object.assign(defaultParam, params);

    return api.get('', data).then(result => result);
};

/**
 * 最近浏览
 *
 * @param data
 */
exports.recentPreview = (skn, limit) => {
    return api.get('', {
        method: 'h5.product.batch',
        productSkn: skn,
        limit: limit,
        page: 1
    }, {
        code: 200
    }).then(data => {
        return _processProduct(data.data.product_list);
    });
};

exports.recentPreviewNew = (uid, limit) => {
    return api.get('', {
        method: 'app.browse.product',
        uid: uid,
        limit: limit,
        page: 1
    }, {
        code: 200
    }).then(data => {
        return data;
    });
};

exports.getSknUrl = (skn, originArr) => {
    return api.get('', {
        method: 'h5.product.batch',
        productSkn: skn,
        page: 1
    }, {
        code: 200
    }).then(data => {
        let urls = data.data.product_list.map((item)=> {
            return {
                skn: item.product_skn,
                url: `/product/pro_${item.product_id}_${item.goods_list[0].goods_id}/${item.cn_alphabet}.html`
            };
        });//eslint-disable-line

        _.each(originArr.data.product_list, product => {
            let urlItem = _.find(urls, url => url.skn === product.product_skn);

            product.goodsUrl = _.get(urlItem, 'url', '');
        });
        return originArr;
    });
};

exports.deleteRecordData = (uid, skn) => {
    return api.get('', {
        method: 'app.browse.delete',
        uid: uid,
        skn: skn
    }, {
        code: 200
    }).then(data => {
        return data;
    });
};

exports.recordNum = (uid, udid) => {
    return api.get('', {
        method: 'app.browse.total',
        uid: uid,
        udid: udid
    }, {
        code: 200
    }).then(data => {
        return data;
    });
};

exports.addRecords = (uid, udid, browseList) => {
    return api.get('', {
        method: 'app.browse.addBrowseBatch',
        uid: uid,
        udid: udid,
        browseList: browseList
    }, {
        code: 200
    }).then(data => {
        return data;
    });
};

const _getGradeGrade = (uid, channel) => {
    return api.get('', {
        method: 'app.passport.vip',
        uid: uid,
        channel: channel || 1
    }, {
        code: 200
    });
};

const iconId = (id) => {
    return {
        1: 'icon-5',
        2: 'icon-0',
        3: 'icon-8',
        4: 'icon-niandu',
        5: 'icon-kuaisu',
        6: 'icon-zazhi',
        9: 'icon-youhui',
        10: 'icon-vip'
    }[id];
};

exports.getGrade = (uid, channel) => {
    if (uid) {
        return api.all([
            _getGradeGrade(uid, channel),
            _getUserProfileData(uid)
        ]).then((result) => {
            let obj = {
                privilege: []
            };

            if (result[0] && result[0].data) {
                let perf = (100 * (result[0].data.current_year_cost / result[0].data.next_need_cost)).toFixed(2);

                _.forEach(result[0].data.enjoy_preferential, function(val) {

                    if (parseInt(val.id, 10) === 7 || parseInt(val.id, 10) === 8) {
                        return true;
                    }

                    obj.privilege.push({
                        description: val.description,
                        pic: iconId(parseInt(val.id, 10)),
                        title: val.title
                    });

                });

                switch (result[0].data.current_vip_level) {
                    case '0': // 普通会员
                        obj = _.assign(obj, {
                            vip0: true,
                            percent: perf
                        });
                        break;
                    case '1': // 银卡会员
                        obj = _.assign(obj, {
                            vip1: true,
                            percent: perf
                        });
                        break;
                    case '2': // 金卡会员
                        obj = _.assign(obj, {
                            vip2: true,
                            percent: perf
                        });
                        break;
                    case '3': // 白金会员
                        obj = _.assign(obj, {
                            vip3: true,
                            percent: 100
                        });
                        break;
                    default:
                }

                let upg = (1 * (result[0].data.upgrade_need_cost)).toFixed(2);

                obj = _.assign(obj, {
                    costOfThisYear: result[0].data.current_year_cost,
                    sumCost: result[0].data.current_total_cost,
                    costGap: upg
                });

                // if (result[0].data.current_vip_level === '3') {
                //     // 当vip等级升至顶级时,进度条满格
                //     obj = _.assign(obj, {
                //         percent: 100
                //     });
                // } else {

                //     let perf = (100 * (result[0].data.current_year_cost / result[0].data.next_need_cost)).toFixed(2);

                //     obj = _.assign(obj, {
                //         percent: perf
                //     });

                // }

            }

            if (result[0] && result[0].data) {
                obj = _.assign(obj, {
                    name: result[1].nickname
                });
            }

            return obj;
        });
    } else {
        return Promise.resolve({});
    }
};

exports.getPreferential = (params) => {

    return api.get('', {
        method: 'app.passport.getPrivilege',
        uid: params.uid,
        channel: params.channel || 1
    }, {
        code: 200
    }).then((result) => {

        let resu = {
            privilege: []
        };

        _.forEach(result.data, function(val) {

            if (parseInt(val.id, 10) === 7 || parseInt(val.id, 10) === 8) {
                return true;
            }

            resu.privilege.push({
                description: val.description,
                pic: iconId(parseInt(val.id, 10)),
                title: val.title
            });

        });

        return resu;

    });
};

// 商品收藏数量接口
exports.favoriteNum = (uid) => {
    return singleAPI.get('favorite', {
        method: 'app.favorite.getFavoriteCount',
        uid: uid
    }, {
        code: 200
    });
};


// 资讯收藏数量接口
exports.editorialNum = (uid) => {
    return serviceAPI.post('guang/api/v2/favorite/getFavNum', {
        uid: uid,
        app_type: 1
    }, {
        code: 200
    });
};