# Source: DataBaseSync.js

    /**
     * @content 数据库同步编辑功能组件
     * @author  2019-09-25
     */
    import { NativeModules } from 'react-native';

    let DBSC = NativeModules.JSDataBaseSync;

    import SyncBase from './SyncBase.js';
    import DownloadDataBaseParmeters from './DownloadDataBaseParmeters.js';
    import SyncDataBaseParmeters from './SyncDataBaseParmeters.js';
    import MapServiceInfo from './MapServiceInfo.js';

    /**
     * @class DataBaseSync
     * @description 数据库同步编辑
     */
    export default class DataBaseSync extends SyncBase {
      // constructor(){
      //     super()
      //     Object.defineProperty(this,"_MGDataBaseSyncId", {
      //         get:function(){
      //             return this._MGSyncBaseId
      //         },
      //         set:function(_MGDataBaseSyncId){
      //             this._MGSyncBaseId = _MGDataBaseSyncId
      //         },
      //     })
      // }

      /**
       * 构造一个新的 DataBaseSync 对象。
       * @memberOf DataBaseSync
       * @returns {Promise.<DataBaseSync>}
       */
      //   async createObj() {
      //     try{
      //         var {DataBaseSyncId} = await DBSC.createObj();
      //         var dataBaseSync = new DataBaseSync();
      //         dataBaseSync._MGDataBaseSyncId = DataBaseSyncId;
      //         return dataBaseSync;
      //     }catch(e){
      //         console.error(e);
      //     }
      //   }

      /**
       * 创建默认的下载数据参数
       * @memberOf DataBaseSync
       * @param {String} strIGServerBaseURL 地图服务基地址
       * @param {String} strDocName 地图文档名称
       * @param {int} mapID 地图ID
       * @param {Rect} extents 范围
       * @returns {Promise.<DownloadDataBaseParmeters>} 下载数据参数
       */
      static async createDefaultDownloadDataBaseParmeters(
        strIGServerBaseURL,
        strDocName,
        mapID,
        extent
      ) {
        try {
          let {
            DownloadDataBaseParmetersId,
          } = await DBSC.createDefaultDownloadDataBaseParmeters(
            strIGServerBaseURL,
            strDocName,
            mapID,
            extent._MGRectId
          );
          var parmeters = new DownloadDataBaseParmeters();
          parmeters._MGDownloadDataBaseParmetersId = DownloadDataBaseParmetersId;
          return parmeters;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 创建同步的下载数据参数
       * @memberOf DataBaseSync
       * @param {DataBase} database 数据库对象
       * @returns {Promise.<SyncDataBaseParmeters>} 同步的下载数据参数
       */
      static async createDefaultSyncDataBaseParmeters(database) {
        try {
          let {
            SyncDataBaseParmetersId,
          } = await DBSC.createDefaultSyncDataBaseParmeters(database._MGDataBaseId);
          var parmeters = new SyncDataBaseParmeters();
          parmeters._MGSyncDataBaseParmetersId = SyncDataBaseParmetersId;
          return parmeters;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 获取地图服务信息
       * @memberOf DataBaseSync
       * @param {String} strIGServerBaseURL 地图服务基地址
       * @param {String} strDocName 地图文档名称
       * @param {int} mapIDs 地图ID
       * @returns {Promise.<MapServiceInfo>} 地图服务信息
       */
      static async getMapServiceInfo(strIGServerBaseURL, strDocName, mapID) {
        try {
          let { MapServiceInfoId } = await DBSC.getMapServiceInfo(
            strIGServerBaseURL,
            strDocName,
            mapID
          );
          var mapServiceInfo = new MapServiceInfo();
          mapServiceInfo._MGMapServiceInfoId = MapServiceInfoId;
          return mapServiceInfo;
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 地图下载
       * @memberOf DataBaseSync
       * @param {String} strIGServerBaseURL 地图服务基地址
       * @param {String} strDocName 地图文档名称
       * @param {int} mapID 地图ID
       * @param {DownloadDataBaseParmeters} params 异步参数
       * @param {String} strPath 全名
       * @returns {Promise.<int>} 下载同步编号
       */
      static async downloadASync(
        strIGServerBaseURL,
        strDocName,
        mapID,
        params,
        strPath
      ) {
        try {
          return await DBSC.downloadASync(
            strIGServerBaseURL,
            strDocName,
            mapID,
            params._MGDownloadDataBaseParmetersId,
            strPath
          );
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 更新数据库
       * @memberOf DataBaseSync
       * @param {SyncDataBaseParmeters} params 异步参数
       * @param {DataBase} database 数据库
       * @returns {Promise.<int>} 更新同步编号
       */
      static async updateASync(params, database) {
        try {
          return await DBSC.updateASync(
            params._MGSyncDataBaseParmetersId,
            database._MGDataBaseId
          );
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 提交更新(异步执行)
       * @memberOf DataBaseSync
       * @param {SyncDataBaseParmeters} params 异步参数
       * @param {DataBase} database 数据库
       * @returns {Promise.<int>} 提交同步编号
       */
      static async commitASync(params, database) {
        try {
          return await DBSC.commitASync(
            params._MGSyncDataBaseParmetersId,
            database._MGDataBaseId
          );
        } catch (e) {
          console.error(e);
        }
      }

      /**
       * 停止同步
       * @memberOf DataBaseSync
       * @param {int} lSyncCode  同步编号
       * @return  {Promise.<int>} >0 成功; <=0 失败
       */
      static async stopASync(lSyncCode) {
        try {
          return await DBSC.stopASync(lSyncCode);
        } catch (e) {
          console.error(e);
        }
      }
    }