import $runtime,{RuntimeEventBus} from "./message/RuntimeEventBus";
import $port,{PortEventBus} from "./message/PortEventBus";
import $demo,{EventBusDemo} from "./message/EventBusDemo";
import $window,{WindowEventBus} from "./message/WindowEventBus";
import StorageDataService from "./storage/StorageDataService";
import StorageLocalService from "./storage/StorageLocalService";
import StorageManagedService from "./storage/StorageManagedService";
import StorageSessionService from "./storage/StorageSessionService";
import StorageSyncService from "./storage/StorageSyncService";
import $action,{ActionService} from "./action/ActionService";
import $css,{CssSelectorService} from "./dom/CssSelectorService";
import $cover,{SelectorCoverService} from "./dom/SelectorCoverService";
import $drag,{DomDragService} from "./dom/DomDragService";
import ResponseUtils from "./utils/ResponseUtils";
import InterceptorRunner from './interceptor/InterceptorRunner'
import { getXPath,getSelector,xPathToCss } from "./utils/DomUtils";
import inject from "./inject/inject";
import { InjectAjaxBus } from "./inject/InjectAjaxBus";
const $inject=new InjectAjaxBus()
import {isNodeEnvironment,getEnv, isDefined,isExtension,isBackgroundScript,isContentScript,isPopupScript,isString,isObject,isArray,isObjectOrArray ,isFunction,isFunctionAsync, isPromise} from "./utils/Utils";
const $storage={
  data:new StorageDataService(),
  local:new StorageLocalService(),
  managed:new StorageManagedService(),
  session:new StorageSessionService(),
  sync:new StorageSyncService()
}
class WorkService{
  constructor () {
  }
  init(){
    //后端提供axios服务
    //后端提供共享数据服务
    //上面已经有导出了
    // new StorageDataService()
    // //后端提供storage数据服务，让content-script直接操作storage
    // new StorageLocalService()
    // new StorageManagedService()
    // new StorageSessionService()
    // new StorageSyncService()
    // //监听browser_action点击事件
    // new ActionService()
  }
  initTest(){//测试
    $runtime.$on('background', (res:any,sender:chrome.runtime.MessageSender,sendResponse:any)=>{
      console.log('background on message---',res)
      return 'background收到runtimeBus'+res
    })
    $runtime.$on('testSend',(res:any,sender:chrome.runtime.MessageSender,sendResponse:any)=>{
      console.log('testSend background on message---',res)
      return 'background收到runtimeBus'+res
    })
    $port.$on('background',(res:any,sender:chrome.runtime.MessageSender,sendResponse:any)=>{
      console.log('background on port message---',res)
      return 'background收到portBus'
    })
  }
}
export {WorkService,$css,$inject,inject,$action,$drag,$window,$storage,$runtime,$port,$demo,$cover,InterceptorRunner,SelectorCoverService,CssSelectorService,DomDragService,RuntimeEventBus,PortEventBus,EventBusDemo,WindowEventBus,StorageDataService,StorageManagedService,StorageSessionService,StorageSyncService,ActionService}
export { isNodeEnvironment,getEnv,isDefined,isExtension,isBackgroundScript,isContentScript,isPopupScript,isString,isObject,isArray,isObjectOrArray,isFunction,isFunctionAsync ,ResponseUtils,isPromise,getXPath,getSelector,xPathToCss}
export default{
  $window,$runtime,$port,$demo,$action,$drag,$storage,$css,$cover,$inject,inject,
  CssSelectorService,DomDragService,SelectorCoverService,InterceptorRunner,
  WorkService,RuntimeEventBus,PortEventBus,EventBusDemo,WindowEventBus,StorageDataService,StorageManagedService,StorageSessionService,StorageSyncService,ActionService,
  isDefined,isExtension,isBackgroundScript,isContentScript,isPopupScript,isString,isObject,isArray,isObjectOrArray 
  ,isNodeEnvironment,getEnv,isFunction,isFunctionAsync,ResponseUtils,isPromise,getXPath,getSelector,xPathToCss
}
