import connectionManager from"./../emby-apiclient/connectionmanager.js";import loading from"./../loading/loading.js";import globalize from"./globalize.js";import textEncoding from"./textencoding.js";import responseHelper from"./responsehelper.js";import{appHost}from"./servicelocator.js";import appSettings from"./appsettings.js";function showAlert(options){return Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)})}function showAlertAndResolve(options){return showAlert(options).catch(function(){return Promise.resolve()})}function showConfirm(options){return Emby.importModule("./modules/common/dialogs/confirm.js").then(function(confirm){return confirm(options)})}function showServerUpdateNeededAlert(instance){var text=globalize.translate("ServerUpdateNeeded","https://emby.media");let html;return showAlertAndResolve({html:html=appHost.supports("externallinks")&&appHost.supports("targetblank")&&appHost.supports("externalappinfo")?globalize.translate("ServerUpdateNeeded",'https://emby.media'):html,text:text}).then(function(){return instance.showSelectServer()})}function BaseAppRouter(){}function showServerLoginFromUserId(instance,options){var userId=options.userId;if(!userId)return Promise.reject();let apiClient=options.apiClient;return apiClient.getUser(userId).then(function(user){return user.HasPassword?instance.showServerLogin({apiClient:apiClient,username:user.Name,loginType:"manual"}):instance.authenticateUser({serverId:user.ServerId,username:user.Name})})}function catchToResolve(err){return Promise.resolve()}function showProfilePinPrompt(instance,apiClient,user){return loading.hide(),instance.showProfilePinPrompt({apiClient:apiClient,user:user}).then(function(result){return instance.setPinValidated(user.Id),Promise.resolve(result)})}function onChangeToUserErrorPublic(err){return loading.hide(),Promise.reject(err)}function onChangeToUserError(err){loading.hide();var errorName=(err?.name||"").toLowerCase();let instance=this.instance;var options=this.options;let apiClient=options.apiClient;options=options.userId;return"forgotpin"!==errorName?Promise.reject(err):apiClient.getUser(options).then(function(user){user.HasPassword?instance.showServerLogin({apiClient:apiClient,username:user.Name,loginType:"manual"}):instance.showServerLogin({apiClient:apiClient})})}BaseAppRouter.prototype.setPinValidated=function(userId){this._pinValidated=userId},BaseAppRouter.prototype.isPinValidated=function(userId){return this._pinValidated===userId},BaseAppRouter.prototype.showServerLogin=function(options){let instance=this;return showServerLoginFromUserId(this,options).catch(function(){var apiClient=options.apiClient;return console.log("appRouter - showServerLogin: "+apiClient.serverId()),apiClient.getPublicUsersQueryResult({Limit:0}).then(function(result){return result.TotalRecordCount?options.loginType="visual":options.loginType="manual",instance.showServerLogin(options)})})},BaseAppRouter.prototype.showEnableProfilePinPrompt=function(options){let user=options.user;return showConfirm({title:globalize.translate("TitleProfilePin"),cancelText:globalize.translate("No"),confirmText:globalize.translate("Yes"),text:globalize.translate("RequireEnteringPinToReturnQuestion")}).then(function(){appSettings.enableProfilePin(user.Id,!0)},function(){appSettings.enableProfilePin(user.Id,!1)})},BaseAppRouter.prototype.authenticateUser=function(options){loading.show();let instance=this,apiClient=connectionManager.getApiClient(options.serverId);return apiClient.authenticateUserByName(options.username,options.password).then(function(result){instance.setPinValidated(result.User.Id);let profilePinPromise;return(profilePinPromise=appSettings.enableAutoLogin()&&result.User.Configuration.ProfilePin?(loading.hide(),instance.showEnableProfilePinPrompt({apiClient:apiClient,user:result.User}).catch(catchToResolve)):(result.User.Configuration.ProfilePin?appSettings.enableProfilePin(result.User.Id,!0):appSettings.enableProfilePin(result.User.Id,!1),Promise.resolve())).then(function(){return instance.handleConnectionResult({State:"SignedIn",ApiClient:apiClient},{enableProfilePin:!1})})},function(result){apiClient.isMinServerVersion("4.8.4")?(result.errorTitle=globalize.translate("HeaderSignInError"),responseHelper.handleErrorResponse(result)):(loading.hide(),showAlert({text:globalize.translate("MessageInvalidUser"),title:globalize.translate("HeaderSignInError")}))})},BaseAppRouter.prototype.showConnectionErrorAlert=function(result,options){result=result.Server?.Name;return showAlertAndResolve({text:globalize.translate("MessageUnableToConnectToServer"),title:result?globalize.translate("TitleUnableToReachName",textEncoding.htmlEncode(result)):globalize.translate("TitleUnableToReachServer")})},BaseAppRouter.prototype.handleConnectionResult=function(result,options){switch(console.log("handleConnectionResult: "+(result.State||"")),result.State){case"SignedIn":this.isPinValidated(result.ApiClient.getCurrentUserId())||this.setPinValidated(null),this.handleSignedInResult(result,options);break;case"ServerSignIn":this.showServerLogin({apiClient:result.ApiClient});break;case"ServerSelection":appHost.supports("multiserver")?this.showSelectServer():this.showServerLogin({apiClient:connectionManager.currentApiClient()});break;case"ConnectSignIn":!0===options?.useWelcomeForConnectSignIn?this.showWelcome():this.showConnectLogin();break;case"ServerUpdateNeeded":!1===options?.allowServerUpdateNeedAlert?this.showSelectServer():(loading.hide(),showServerUpdateNeededAlert(this));break;case"Unavailable":loading.hide(),this.showConnectionErrorAlert(result,options)}},BaseAppRouter.prototype.promptForProfilePin=function(apiClient,userId){let instance=this;return connectionManager.isLoggedIntoConnect()||!appSettings.enableProfilePin(userId)||this.isPinValidated(userId)?Promise.resolve():apiClient.getUser(userId).then(function(user){return user.Configuration.ProfilePin?showProfilePinPrompt(instance,apiClient,user):Promise.resolve()})},BaseAppRouter.prototype.forgotPin=function(options){return this.showServerLogin(options)},BaseAppRouter.prototype.changeToUser=function(options){let apiClient=options.apiClient,userId=options.userId,serverId=apiClient.serverId(),instance=(loading.show(),this),boundOnError=onChangeToUserError.bind({instance:instance,options:options});return connectionManager.validateCanChangeToUser(apiClient,userId).then(function(){return instance.promptForProfilePin(apiClient,userId).then(function(){return connectionManager.changeToUser(apiClient,userId).then(function(){var server=connectionManager.getSavedServers().filter(function(s){return s.Id===serverId})[0];return server?connectionManager.connectToServer(server,{userId:userId,enableAutoLogin:!0}).then(function(result){switch(loading.hide(),result.State){case"SignedIn":case"ServerUpdateNeeded":return instance.handleConnectionResult(result,{enableProfilePin:!1}),Promise.resolve();default:return Promise.reject(result)}}):Promise.reject("server not found")},boundOnError)},boundOnError)},onChangeToUserErrorPublic)};export default BaseAppRouter;