// Copyright 2019 The TAL Authors. All rights reserved.
#ifndef LIB_OWCR_EXTENSION_PUBLIC_IEXTENSION_MANAGER_
#define LIB_OWCR_EXTENSION_PUBLIC_IEXTENSION_MANAGER_

namespace owcr {
namespace extension {

class IExtensionNetworkDelegate;
class IExtensionMediaStreamDelegate;
class IExtensionThreadDelegate;
class IExtensionPagesDelegate;
class IExtensionApiDelegate;
class IExtensionMediaApplyDelegate;

enum EXTENSION_MANAGER_VERSION_NUM {
  IEM_V_1 = 1,
};

class IExtensionManager_V_1 {
 public:
  IExtensionManager_V_1() {}
  virtual ~IExtensionManager_V_1() {}

  // IEM_V_1
  virtual IExtensionNetworkDelegate* GetNetworkDelegate() = 0;
  virtual IExtensionMediaStreamDelegate* GetMediaStreamDelegate() = 0;
  virtual IExtensionThreadDelegate* GetThreadDelegate() = 0;
  virtual IExtensionPagesDelegate* GetPagesDeleaget() = 0;
  virtual IExtensionPagesDelegate* GetReportDeleaget() = 0;
  virtual IExtensionApiDelegate* GetApiDelegate() = 0;
};

class IExtensionManager_V_2 {
 public:
  IExtensionManager_V_2() {}
  virtual ~IExtensionManager_V_2() {}
  virtual IExtensionMediaApplyDelegate* GetMediaApplyDelegate() = 0;
};


class IExtensionManager : public IExtensionManager_V_1,
                          public IExtensionManager_V_2{
 public:
  IExtensionManager() {}
  virtual ~IExtensionManager() {}
  virtual bool GetVersionAPI(EXTENSION_MANAGER_VERSION_NUM num, void** api) = 0;
};

}  // namespace extension
}  // namespace owcr
#endif  // LIB_OWCR_EXTENSION_PUBLIC_IEXTENSION_MANAGER_
