import e from"@tencentcloud/chat";import t from"tim-upload-plugin";import n from"tim-profanity-filter-plugin";class i{constructor(){this.serviceMap=new Map}registerService(e,t){this.serviceMap.has(e)||(console.log(`TUIServiceManager.registerService serviceName:${e}`),this.serviceMap.set(e,t))}unregisterService(e){this.serviceMap.has(e)&&(console.log(`TUIServiceManager.unregisterService serviceName:${e}`),this.serviceMap.delete(e))}getService(e){return this.serviceMap.get(e)}callService(e){const{serviceName:t,method:n,params:i,callback:s}=e,o=this.getService(t);if(console.log(`TUIServiceManager.callService serviceName:${t}, service:`,o),o)return o.onCall(n,i,s)}}class s{constructor(){this.extensionMap=new Map}registerExtension(e,t){if(console.log(`TUIExtensionManager.registerExtension extensionID:${e}`),!this.extensionMap.has(e)){const t=[];this.extensionMap.set(e,t)}const n=this.extensionMap.get(e);-1===n.indexOf(t)&&n.push(t)}unregisterExtension(e,t){if(console.log(`TUIExtensionManager.unregisterExtension extensionID:${e}`),this.extensionMap.has(e)){const n=this.extensionMap.get(e),i=n.indexOf(t);i>-1&&n.splice(i,1)}}getExtensionList(e,t){const n=t?`params:${JSON.stringify(t)}`:"";console.log(`TUIExtensionManager.getExtensionList extensionID:${e} ${n}`);let i=[],s=[];if(this.extensionMap.has(e)){i=this.extensionMap.get(e);for(let n=0;n(this.userID="",this.userSig="",this.TUICore.notifyEvent(E.TUILogin.EVENT.LOGIN_STATE_CHANGED,E.TUILogin.EVENT_SUB_KEY.USER_LOGOUT_SUCCESS),Promise.resolve(e))))}destroy(){return this.chat.destroy().then((e=>(this.userID="",this.userSig="",this.TUICore.notifyEvent(E.TUILogin.EVENT.LOGIN_STATE_CHANGED,E.TUILogin.EVENT_SUB_KEY.USER_LOGOUT_SUCCESS),Promise.resolve(e))))}setLogLevel(e){return this.chat.setLogLevel(e)}getContext(){return{chat:this.chat,SDKAppID:this.SDKAppID,userID:this.userID,userSig:this.userSig}}reportPlugin(){var e;for(const t in _)this.TUICore.getService(t)&&(null===(e=this.chat.callExperimentalAPI("isFeatureEnabledForStat",_[t]))||void 0===e||e.catch((e=>{})))}loginChat(e){const{userID:t,userSig:n}=e;return new Promise(((e,i)=>{this.chat.login({userID:t,userSig:n}).then((t=>{t.data.repeatLogin&&this.chat.isReady()&&e(t),this.reportPlugin(),this.loginStatusPromise.set("login",{resolve:e,reject:i,imResponse:t})})).catch((e=>{i(e)}))}))}onChatEvent(){this.chat.on(this.EVENT.SDK_READY,this.onSDKReady,this),this.chat.on(this.EVENT.SDK_NOT_READY,this.onSDKNotReady,this),this.chat.on(this.EVENT.KICKED_OUT,this.onUserKicked,this),this.isOnChatEvent=!0}offChatEvent(){this.isOnChatEvent&&(this.chat.off(this.EVENT.SDK_READY,this.onSDKReady,this),this.chat.off(this.EVENT.SDK_NOT_READY,this.onSDKNotReady,this),this.chat.off(this.EVENT.KICKED_OUT,this.onUserKicked,this),this.isOnChatEvent=!1)}onSDKReady(){if(this.loginStatusPromise.has("login")){this.TUICore.notifyEvent(E.TUILogin.EVENT.LOGIN_STATE_CHANGED,E.TUILogin.EVENT_SUB_KEY.USER_LOGIN_SUCCESS);const e=setTimeout((()=>{const t=this.loginStatusPromise.get("login");t.resolve(t.imResponse),clearTimeout(e),this.loginStatusPromise.delete("login")}),500)}}onSDKNotReady(){if(this.loginStatusPromise.has("login")){this.loginStatusPromise.get("login").reject(new Error("sdk not ready"))}this.loginStatusPromise.delete("login")}onUserKicked(e){e.data.type!==this.TYPES.KICKED_OUT_USERSIG_EXPIRED?this.TUICore.notifyEvent(E.TUILogin.EVENT.LOGIN_STATE_CHANGED,E.TUILogin.EVENT_SUB_KEY.USER_KICKED_OFFLINE):this.TUICore.notifyEvent(E.TUILogin.EVENT.LOGIN_STATE_CHANGED,E.TUILogin.EVENT_SUB_KEY.USER_SIG_EXPIRED)}registerPlugin(e){const{useUploadPlugin:i=!1,useProfanityFilterPlugin:s=!1,TUIOfflinePush:o,offlinePushConfig:E,TIMPush:r,pushConfig:a}=e;!0===i&&this.chat.registerPlugin({"tim-upload-plugin":t}),!0===s&&this.chat.registerPlugin({"tim-profanity-filter-plugin":n}),U&&r&&a&&this.chat.registerPlugin({"tim-push":r,pushConfig:a}),U&&o&&E&&this.chat.registerPlugin({"tim-offline-push-plugin":o,offlinePushConfig:E})}getStatScene(e){let t;return e&&o.indexOf(e)>-1&&(t=this.genStatScene(e)),t}genStatScene(e){let t="";return S?(M&&(t=`k-${e}-pc-uni`),C&&(t=`k-${e}-h5-uni`),U&&(t=`k-${e}-app-uni`),r&&(t=`k-${e}-mp-uni`),t):(M&&(t=`k-${e}-pc`),C&&(t=`k-${e}-h5`),t)}}class p{constructor(){this.eventMap=new Map}registerEvent(e,t,n){const i=this.getKey(e,t);if(console.log(`TUIEventManager.registerEvent eventName:${e} subKey:${t}`),!this.eventMap.has(i)){const e=[];this.eventMap.set(i,e)}const s=this.eventMap.get(i);-1===s.indexOf(n)&&(s.push(n),this.renotify(e,t,n))}unregisterEvent(e,t,n){console.log(`TUIEventManager.unregisterEvent eventName:${e} subKey:${t}`);const i=this.getKey(e,t);if(this.eventMap.has(i)){const e=this.eventMap.get(i),t=e.indexOf(n);t>-1&&e.splice(t,1)}}notifyEvent(e,t,n){const i=this.getKey(e,t),s=n?`params:${JSON.stringify(n)}`:"";if(console.log(`TUIEventManager.notifyEvent eventName:${e} subKey:${t} ${s}`),this.eventMap.has(i)){this.eventMap.get(i).forEach((i=>{i.onNotifyEvent(e,t,n)}))}}getKey(e,t){let n=e;return t&&(n=`${e}-${n}`),n}renotify(e,t,n){if(e===E.TUILogin.EVENT.LOGIN_STATE_CHANGED&&t===E.TUILogin.EVENT_SUB_KEY.USER_LOGIN_SUCCESS){const{chat:e}=N.getInstance().getContext();e&&e.isReady()&&(n.onNotifyEvent(E.TUILogin.EVENT.LOGIN_STATE_CHANGED,E.TUILogin.EVENT_SUB_KEY.USER_LOGIN_SUCCESS),console.log("TUIEventManager.renotify success."))}}}class v{constructor(){this.serviceManager=new i,this.extensionManager=new s,this.eventManager=new p}static getInstance(){return v.instance||(console.log("TUICore.getInstance ok."),v.instance=new v),v.instance}registerService(e,t){return this.serviceManager.registerService(e,t)}unregisterService(e){return this.serviceManager.unregisterService(e)}getService(e){return this.serviceManager.getService(e)}callService(e){return this.serviceManager.callService(e)}registerExtension(e,t){return this.extensionManager.registerExtension(e,t)}unregisterExtension(e,t){return this.extensionManager.unregisterExtension(e,t)}getExtensionList(e,t){return this.extensionManager.getExtensionList(e,t)}registerEvent(e,t,n){return this.eventManager.registerEvent(e,t,n)}unregisterEvent(e,t,n){return this.eventManager.unregisterEvent(e,t,n)}notifyEvent(e,t,n){return this.eventManager.notifyEvent(e,t,n)}}console.log("TUICore.VERSION:2.2.9");const R=v.getInstance(),A=N.getInstance(R);export{E as TUIConstants,R as TUICore,A as TUILogin,R as default};