define(function (require, exports, module) {
var session = null;
var ev = require("../platform/EventObject.js");
var ajax = require("../platform/webRequest.js");
var storage = require("../platform/storage.js");
var keepAlive = require("../account/keepalive.js");
var passengers = null;
var currentuser = sessionStorage["_currentuser"];
var parser = require("../platform/parser.js");
if (sessionStorage["_passenger"])
passengers = JSON.parse(sessionStorage["_passenger"]);
//var LoginUser = require("./LoginUser.js");
var SessionMgr = function () {
var that = this;
var _passengerInLoad = false;
ev.apply(this, arguments);
var loadPassengers = function () {
if (!that.isLogined)
return;
if (_passengerInLoad)
return;
_passengerInLoad = true;
ajax.sendPost("confirmPassenger/getPassengerDTOs", "leftTicket/init", null, "json", function () {
_passengerInLoad = false;
var data = this.model;
if (!data || !data.data || !data.data.normal_passengers) {
passengers = null;
that.fireEvent("passengerLoadFailed");
that.fireEvent("passengerLoaded", passengers);
} else {
var p1 = data.data.normal_passengers;
passengers = _.filter(p1, parser.canPassageAddToOrder);
//对联系人数据进行预处理
parser.processPassenger(passengers);
if (p1.length !== passengers.length) {
that.fireEvent("notValidPassengerFound");
document.dispatchEvent(new Event("notValidPassengerFound"));
}
sessionStorage["_passenger"] = JSON.stringify(passengers);
that.fireEvent("passengerLoaded", passengers);
}
}, function () {
_passengerInLoad = false;
passengers = null;
sessionStorage.removeItem("_passenger");
that.fireEvent("passengerLoadFailed");
that.fireEvent("passengerLoaded", passengers);
});
};
that.checkLoginState = function (callback) {
ajax.sendGet("modifyUser/initQueryUserInfo", "", null, "text", function () {
if (this.text.indexOf("登录名:") !== -1) {
sessionStorage["_currentuser"] = "";
callback({ logined: false });
} else {
var m = /姓名:.*[\r\n]+
]+>([^<]+)<\/div>/i.exec(this.text) && RegExp.$1;
var status = /核验状态:[\w\W]+?>([^<>]+?)<\/div>/.exec(this.text) && RegExp.$1;
var un = /userDTO\.loginUserDTO\.user_name.*?value=['"]([^'"]+)['"]/.exec(this.text) && RegExp.$1;
sessionStorage["_currentuser"] = un;
if (!m || !status)
callback({ logined: false });
else {
callback({ logined: true, realName: m, status: status, isChecked: status === '已通过', username: un });
}
}
}, function () {
callback({ logined: false });
});
};
that.loadProfile = function (username, checkData) {
var profile = storage.obj("12306_user_" + username) || { username: username, passengers: [], savedProfile: {}, currentProfile: {}, rawPassenger: [], options: {} };
that.current = profile;
if (username) {
if (checkData) {
that.current.dispname = checkData.realName;
that.fireEvent("userInfoUpdated");
if (!checkData.isChecked)
that.fireEvent("userNotChecked");
} else {
that.checkLoginState(function (data) {
that.current.dispname = data.realName;
that.fireEvent("userInfoUpdated");
if (!data.isChecked)
that.fireEvent("userNotChecked");
});
}
}
};
that.resetProfile = function () {
sessionStorage["_currentuser"] = "";
that.loadProfile("");
};
that.save = function () {
if (!that.current)
return;
var key = "12306_user_" + that.current.username;
storage.put(key, that.current);
};
that.getPassengers = function (callback) {
if (!callback)
return;
if (!that.isLogined) callback([]);
if (passengers)
callback(passengers);
else {
that.once("passengerLoaded", function () {
callback(passengers);
});
loadPassengers();
}
};
Object.defineProperty(this, "current", {
get: function () {
return session;
},
set: function (v) {
if (session === v) return;
if (v) {
if (v.username !== currentuser) {
sessionStorage["_currentuser"] = v.username;
sessionStorage.removeItem("_passenger");
passengers = null;
}
session = v;
}
else {
that.resetProfile();
}
console.log("sessionChanged fired.")
that.fireEvent("sessionChanged");
(that.isLogined && keepAlive.start()) || keepAlive.stop();
}
});
Object.defineProperty(this, "isLogined", {
get: function () {
return session && session.username || false;
}
});
Object.defineProperty(this, "currentProfile", {
get: function () {
return session.currentProfile;
}
});
document.addEventListener("loginInvalid", function () {
if (that.isLogined) {
document.dispatchEvent(new CustomEvent("userForcedOut"));
that.fireEvent("userForcedOut");
}
that.resetProfile();
});
//主动检测
if (typeof (currentuser) === "undefined") {
that.checkLoginState(function (data) {
if (data.logined) {
that.loadProfile(data.username, data);
} else {
that.loadProfile("");
}
});
} else
this.loadProfile(currentuser || "");
return this;
};
SessionMgr.prototype = Object.create(ev);
SessionMgr.constructor = SessionMgr;
module.exports = new SessionMgr();
});