app.factory('alertService', function(){
    function Alert(){
        this.title = null;
        this.message = null;
        this.visible = null;
        this.cb = null;
        this.invite = "";
    }

    Alert.prototype.showMessage = function(title, msg, cb){
        this.message = msg;
        this.title = title;
        this.visible = true;
        this.cb = cb;
        this.invite = "";
    }

    Alert.prototype.dismiss = function(){
        this.message = null;
        this.title = null;
        this.visible = false;
        this.invite = "";
        if(this.cb) {this.cb();}
    }

    return {
        create: function(){
            return new Alert();
        }
    }
});

app.factory('wx', ['$window', function($window){
  var wechat = $window.wx;
  return wechat;
}]);

app.factory('auth', ['$http','$routeParams', '$q', 'session', 'config',function($http,$routeParams, $q, session,config){
    //是否已经绑定
    var isBind = function(){
        var defer = $q.defer();

        var token = getToken();
        if(token && token.length>10){
            defer.resolve(token);
        } else {
            var code = window.g_code || $routeParams.code || session.get("code");
            $http.post(
                '/wechat/get_bind',
                {}  ///不用传code了,都由服务器来处理
            ).then(function(response){
                if(response.data.status!=0){
                    defer.reject(response.data.message);
                }else {
                    session.save("token", response.data.token);
                    defer.resolve(response.data.token);
                }
            }).catch(function(e){
                defer.reject(e);
            });
        }

        return defer.promise;
    }

    var getToken = function(){
        return 'token';//session.get("token");
    }
    return {get_bind: isBind, token: getToken};
}]);

app.factory("session", function(){
    return {
        save: function(key,value){
            sessionStorage.setItem(key,value);
        },
        get: function(key){
            return sessionStorage.getItem(key);
        }
    }
});

app.factory('rms', function(){
    var _saveStorage = {};
    var save = function(key, value){
        _saveStorage[key] = value;
    };

    var get = function(key){
        return _saveStorage[key];
    };

    return {save: save, get: get};
});

app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$location', function($http, auth, $routeParams,rms,config,wx,$location){
    var addCommonReply = function(id, type, data,args,reply_type, cb){
        //先判断有没有绑定
//        $http.post(
//            '/wechat/is_bind',
//            {}  ///不用传code了,都由服务器来处理
//        ).then(function(response){
//            console.log(response.data);
//            if(response.data.status != 0){
//                $location.path("/login_tip");
//            }
//        });

        if(!data.comment || data.comment.length<=0){
            return;
        }

        var temp =  data.comment.replace(/\n/g,'<br/>');

        var userInfo = {
            type: type,
            content: temp,
            token: auth.token(),
            reply_type:reply_type
        };
        //回复按钮禁用
        data.disabled = true;

        $http({
            method: 'POST',
            url: apiUrl+ "new_comment/"+id,
            data: userInfo
        }).then(function successCallback(response) {
            //alert("提交成功");
            //数据提交完成,回复按钮启用
            console.log(response);
            if(response.data.status == -1){
                console.log("回复失败！");
                data.comment = "";
                if(response.data.tip == 0){
                    args.scope.replytip = "您不是该私有班级成员，不能回复";
                }
                else{
                    args.scope.replytip = "您不是该私有项目成员，不能回复";
                }
                return;
            }

            data.disabled = false;
            if(typeof cb === 'function'){
                cb(response.data.subscribe);
            }

            var act_id = response.data.act_id;

            //保证内外回复数一致
            activities = rms.get("activities") || [];
            course_activities = rms.get("course_activities") || [];
            project_activities = rms.get("project_activities") || [];
            for(var i in activities){
                if(activities[i].act_id == act_id){
                    activities[i].reply_count += 1;
                    break;
                }
            }
            for(var i in course_activities){
                if(course_activities[i].act_id == act_id){
                    course_activities[i].reply_count += 1;
                    break;
                }
            }
            for(var i in project_activities){
                if(project_activities[i].act_id == act_id){
                    project_activities[i].reply_count += 1;
                    break;
                }
            }
            rms.save("activities",activities);
            rms.save("course_activities",course_activities);
            rms.save("project_activities",project_activities);

        }, function errorCallback(response) {
        });
    };

//    var loadCommonData = function(id, type,replytype,page){
//        return $http({
//            method: 'GET',
//            url: apiUrl+ type + "/" + id+"?token="+auth.token(),
//        })
//    };

    var loadCommonData = function(id, type,replytype,page){
        return $http({
            method: 'POST',
            url: apiUrl+ type + "/" + id,
            dataType: 'jsonp',
            data:{token:auth.token(),type:replytype,page:page}
        })
    };

    var addCommonPraise = function(act){
//        act.praise_count += 1;
//        act.has_praise = true;

        $http({
            method: 'POST',
            url: apiUrl + "praise/" + act.act_id,
            data:{token:auth.token(),type:act.act_type}
        }).then(function successCallback(response) {
            console.log(response.data);
        }, function errorCallback(response) {
        });

    };

    var decreaseCommonPraise = function(act){
//        act.praise_count -= 1;
//        act.has_praise = false;
        $http({
            method: 'POST',
            url: apiUrl + "praise/" + act.act_id,
            data:{token:auth.token(),type:act.act_type}
        }).then(function successCallback(response) {
            console.log(response.data);
        }, function errorCallback(response) {
        });
    };

    var init = function(args){
        args.scope.replytip = "输入回复内容~";
//        args.scope.formData = {comment: ''};
        var loadData = function(id,replytype,page){
            loadCommonData(id, args.type,replytype,page).then(function successCallback(response) {
                console.log(response.data);
                if(response.data.status == -1){
                    args.loadCallback(response.data);
                    return;
                }
                //--------------分享内容定制-------------
                var tmptile = "分享动态";
                var imgUrl = "";

                if(response.data.data.title){
                    tmptile = response.data.data.title;
                }

                var tmpname = "匿名用户";

                if(response.data.data.user){
                    tmpname = response.data.data.user.realname;
                    imgUrl = window.g_localhost+response.data.data.user.img_url;
                }

                if(response.data.data.author){
                    tmpname = response.data.data.author.realname;
                    imgUrl = window.g_localhost+response.data.data.author.img_url;
                }

                var desc = ""
                if(response.data.data.content){
                    desc = response.data.data.content.replace(/<[^>]+>/gi,"").replace(/[\f\n\r\t\v]/gi,"").replace(/&nbsp;/gi,"");
                }

                if(response.data.data.description){
                    desc = response.data.data.description.replace(/<[^>]+>/gi,"").replace(/[\f\n\r\t\v]/gi,"").replace(/&nbsp;/gi,"");
                }

                if(desc.length > 30){
                    desc = desc.substring(0,30)+"...";
                }

                var title = tmpname+"："+tmptile;
                console.log("desc = "+desc);
                console.log("imgUrl= "+imgUrl);

                var link = "";

                if(args.urlName == "discussion"){
                    var urlName = response.data.type_name + "_discussion";
                    link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+window.g_appid +
                        "&redirect_uri="+window.g_localhost+"/wechat/user_activities?id="+response.data.data.act_id+
                        "&response_type=code&scope=snsapi_userinfo&state="+urlName+"&connect_redirect=1#wechat_redirect";
                }
                else{
                    link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+window.g_appid +
                        "&redirect_uri="+window.g_localhost+"/wechat/user_activities?id="+response.data.data.act_id+
                        "&response_type=code&scope=snsapi_userinfo&state="+args.urlName+"&connect_redirect=1#wechat_redirect";
                }

//                if(args.urlName == "discussion"){
//                    var urlName = response.data.type_name + "_discussion";
//                    link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d" +
//                        "&redirect_uri=https://test.forge.trustie.net/wechat/user_activities?id="+response.data.data.act_id+
//                        "&response_type=code&scope=snsapi_base&state="+urlName+"&connect_redirect=1#wechat_redirect";
//                }
//                else{
//                    link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d" +
//                        "&redirect_uri=https://test.forge.trustie.net/wechat/user_activities?id="+response.data.data.act_id+
//                        "&response_type=code&scope=snsapi_base&state="+args.urlName+"&connect_redirect=1#wechat_redirect";
//                }

                console.log("link= "+link);

                wxConfig(title,desc,imgUrl,link);

                //--------------分享内容定制-------------
                args.loadCallback(response.data);
            }, function errorCallback(response) {
            });
        };

        loadData(args.id,0,0);
        args.scope.addReply = function(data,reply_type){
            console.log(data.comment);
            addCommonReply(data.act_id, args.replyType, data,args,reply_type, function(subscribe){
//                args.scope.formData = {comment: ''};
                if(subscribe == 0){
                    $location.path("/login_tip");
                    return;
                }
                else{
                    loadData(args.id,0,0);
                }

                if(typeof args.replyCallback === 'function'){
                    args.replyCallback();
                }
            });
        };

        args.scope.inputfocus = function(data){
            data.notshow = true;
        };

        args.scope.inputblur = function(data){
            data.notshow = false;
        };

        args.scope.clickReply = function(act_id,data) {
            allchidren = data.all_children;
            for(var i in allchidren){
                if(allchidren[i].act_id != act_id ){
                    allchidren[i].showinput = false;
                }
                else{
                    allchidren[i].showinput = !allchidren[i].showinput;
                    data.notshow = allchidren[i].showinput;
                }
            }
        };

//       动态详情界面点赞与动态界面的数据要同步  保证进入详情点赞后出来显示一致
        args.scope.addPraise = function(act){
            activities = rms.get("activities") || [];
            course_activities = rms.get("course_activities") || [];
            project_activities = rms.get("project_activities") || [];
            for(var i in activities){
                if(activities[i].act_id == act.act_id){
                    activities[i].praise_count += 1;
                    activities[i].has_praise = true;
                    break;
                }
            }
            for(var i in course_activities){
                if(course_activities[i].act_id == act.act_id){
                    course_activities[i].praise_count += 1;
                    course_activities[i].has_praise = true;
                    break;
                }
            }
            for(var i in project_activities){
                if(project_activities[i].act_id == act.act_id){
                    project_activities[i].praise_count += 1;
                    project_activities[i].has_praise = true;
                    break;
                }
            }
            rms.save("activities",activities);
            rms.save("course_activities",course_activities);
            rms.save("project_activities",project_activities);

            act.praise_count += 1;
            act.has_praise = true;
            addCommonPraise(act);
        };

        args.scope.decreasePraise = function(act){
            activities = rms.get("activities") || [];
            course_activities = rms.get("course_activities") || [];
            project_activities = rms.get("project_activities") || [];
            for(var i in activities){
                if(activities[i].act_id == act.act_id){
                    activities[i].praise_count -= 1;
                    activities[i].has_praise = false;
                    break;
                }
            }
            for(var i in course_activities){
                if(course_activities[i].act_id == act.act_id){
                    course_activities[i].praise_count -= 1;
                    course_activities[i].has_praise = false;
                    break;
                }
            }
            for(var i in project_activities){
                if(project_activities[i].act_id == act.act_id){
                    project_activities[i].praise_count -= 1;
                    project_activities[i].has_praise = false;
                    break;
                }
            }
            rms.save("activities",activities);
            rms.save("course_activities",course_activities);
            rms.save("project_activities",project_activities);

            act.praise_count -= 1;
            act.has_praise = false;
            decreaseCommonPraise(act);
        };

        args.scope.showMoreReply = function(replytype,data){
            if(!data.page){
                data.page = 1;
            }
            else{
                data.page = data.page + 1;
            }

            loadCommonData(data.id, args.type,replytype,data.page).then(function successCallback(response) {
                args.loadCallback(response.data);
            }, function errorCallback(response) {
            });
        };

        args.scope.commentreply_path =  config.rootPath+ 'templates/comment_reply.html';

    };

    var wxConfig = function(title,desc,imgUrl,link){

        if(title == null || title == ""){
            title = 'Trustie创新实践平台';
        }

        if(desc == null || desc == ""){
            desc = 'Trustie创新实践平台';
        }

        if(imgUrl == null || imgUrl == ""){
            imgUrl = window.g_localhost+'/images/wechat/wx_logo.jpg';
        }

        wx.ready(function(){
            wx.onMenuShareTimeline({
                title: title, // 分享标题
                link: link, // 分享链接
                imgUrl: imgUrl, // 分享图标
                success: function () {
                    console.log("share successed.");
                },
                cancel: function () {
                    console.log("share canceled.");
                }
            });

            wx.onMenuShareAppMessage({
                title: title, // 分享标题
                desc: desc, // 分享描述
                link: link, // 分享链接
//                    imgUrl: '', // 分享图标
                imgUrl: imgUrl, // 分享图标
//                    type: '', // 分享类型,music、video或link，不填默认为link
//                    dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
                success: function () {
                    // 用户确认分享后执行的回调函数
                },
                cancel: function () {
                    // 用户取消分享后执行的回调函数
                }
            });
        });
    };

    var checkLogin = function(){
        $http.post(
            '/wechat/is_bind',
            {}  ///不用传code了,都由服务器来处理
        ).then(function(response){
                console.log(response.data);
               if(response.data.status != 0){
                   $location.path("/login");
                   return;
               }
        });
    };

    return {init: init, addCommonReply: addCommonReply, loadCommonData: loadCommonData, addCommonPraise: addCommonPraise, decreaseCommonPraise: decreaseCommonPraise, wxConfig: wxConfig, checkLogin: checkLogin};
}]);
