// common/scanMixin.js
// 多厂商PDA扫码器兼容方案 - 策略模式 + 配置表驱动
export default {
  data() {
    return {
      scanReceivers: [], // 支持多个接收器
      isPageActive: false,
      registeredBrands: [] // 已注册的品牌
    }
  },
  
  methods: {
    // 扫码器配置表 - 方便扩展新厂商
    getScannerConfigs() {
      return [
        {
          brand: 'newland', // 东集
          name: '东集',
          action: 'com.android.server.scannerservice.broadcast',
          dataKey: 'scannerdata',
          needSetup: true,
          setupAction: 'com.android.scanner.service_settings',
          setupParams: {
            action_barcode_broadcast: 'com.android.server.scannerservice.broadcast',
            key_barcode_broadcast: 'scannerdata',
            endchar: 'ENTER'
          }
        },
        {
          brand: 'sunmi', // 商米
          name: '商米',
          action: 'com.sunmi.scanner.ACTION_DATA_CODE_RECEIVED',
          dataKey: 'data',
          needSetup: false
        },
        // {
        //   brand: 'honeywell', // 霍尼韦尔
        //   name: '霍尼韦尔',
        //   action: 'com.honeywell.decode.intent.action.EDIT_DATA',
        //   dataKey: 'data',
        //   needSetup: false
        // },
        // {
        //   brand: 'zebra', // 斑马
        //   name: '斑马',
        //   action: 'com.symbol.datawedge.api.RESULT_ACTION',
        //   dataKey: 'com.symbol.datawedge.data_string',
        //   needSetup: false
        // },
        // {
        //   brand: 'idata', // 盈达聚力
        //   name: '盈达聚力',
        //   action: 'android.intent.action.SCANRESULT',
        //   dataKey: 'value',
        //   needSetup: false
        // },
        // {
        //   brand: 'urovo', // 优博讯
        //   name: '优博讯',
        //   action: 'android.intent.ACTION_DECODE_DATA',
        //   dataKey: 'barcode_string',
        //   needSetup: false
        // }
      ];
    },

    // 注册所有扫码广播（推荐方式：同时注册所有厂商）
    registerScanBroadcast(scanCallback) {
      // #ifdef APP-PLUS
      const configs = this.getScannerConfigs();
      
      configs.forEach(config => {
        try {
          this.registerSingleBroadcast(config, scanCallback);
          this.registeredBrands.push(config.brand);
          console.log(`${config.name}扫码广播注册成功`);
        } catch (error) {
          console.log(`${config.name}扫码广播注册失败:`, error);
        }
      });
      
      if (this.registeredBrands.length > 0) {
        console.log('扫码广播注册完成，已注册厂商:', this.registeredBrands.join(', '));
        return true;
      }
      
      console.error('所有扫码广播注册均失败');
      return false;
      // #endif
    },

    // 注册指定厂商的扫码广播
    registerScanBroadcastByBrand(brand, scanCallback) {
      // #ifdef APP-PLUS
      const configs = this.getScannerConfigs();
      const config = configs.find(c => c.brand === brand);
      
      if (!config) {
        console.error(`未找到厂商配置: ${brand}`);
        return false;
      }
      
      try {
        this.registerSingleBroadcast(config, scanCallback);
        this.registeredBrands.push(config.brand);
        console.log(`${config.name}扫码广播注册成功`);
        return true;
      } catch (error) {
        console.error(`${config.name}扫码广播注册失败:`, error);
        return false;
      }
      // #endif
    },

    // 单个广播注册的核心方法
    registerSingleBroadcast(config, scanCallback) {
      const main = plus.android.runtimeMainActivity();
      
      // 如果需要预配置（如东集）
      if (config.needSetup && config.setupAction) {
        try {
          const Intent = plus.android.importClass('android.content.Intent');
          const setupIntent = new Intent(config.setupAction);
          
          Object.keys(config.setupParams || {}).forEach(key => {
            setupIntent.putExtra(key, config.setupParams[key]);
          });
          
          main.sendBroadcast(setupIntent);
          console.log(`${config.name}扫码配置完成`);
        } catch (error) {
          console.error(`${config.name}扫码配置失败:`, error);
        }
      }
      
      // 注册广播接收器
      const IntentFilter = plus.android.importClass('android.content.IntentFilter');
      const filter = new IntentFilter();
      filter.addAction(config.action);
      
      const self = this;
      const receiver = plus.android.implements(
        'io.dcloud.feature.internal.reflect.BroadcastReceiver',
        {
          onReceive: (context, intent) => {
            console.log(`${config.name}扫码广播接收，isPageActive:`, self.isPageActive);
            
            if (!self.isPageActive) return;
            
            try {
              plus.android.importClass('android.content.Intent');
              const scanResult = intent.getStringExtra(config.dataKey);
              
              console.log(`${config.name}扫码结果:`, scanResult);
              
              if (scanResult) {
                self.handleScanResult(scanResult, scanCallback);
              }
            } catch (error) {
              console.error(`处理${config.name}广播数据出错:`, error);
            }
          }
        }
      );
      
      main.registerReceiver(receiver, filter);
      
      // 保存接收器引用，用于后续注销
      this.scanReceivers.push({
        brand: config.brand,
        receiver: receiver
      });
    },

    // 处理扫码结果的统一方法
    handleScanResult(scanResult, scanCallback) {
      try {
        // 数据清理：去除空格、换行符等
        let cleanCode = scanResult.replace(/\s+/g, '').replace(/[\r\n]/g, '');
        
        console.log("扫码结果:", cleanCode);
        
        if (scanCallback) {
          scanCallback(cleanCode);
        }
      } catch (error) {
        console.error("处理扫码结果时出错：", error);
      }
    },
    
    // 取消所有扫码广播监听
    unregisterScanBroadcast() {
      // #ifdef APP-PLUS
      if (this.scanReceivers.length === 0) return;
      
      try {
        const main = plus.android.runtimeMainActivity();
        
        this.scanReceivers.forEach(item => {
          try {
            main.unregisterReceiver(item.receiver);
            console.log(`${item.brand}扫码广播注销成功`);
          } catch (err) {
            console.error(`${item.brand}扫码广播注销失败:`, err);
          }
        });
        
        this.scanReceivers = [];
        this.registeredBrands = [];
        console.log('所有扫码广播注销完成');
      } catch (err) {
        console.error('注销扫码广播失败:', err);
      }
      // #endif
    },
    
    // 通用的商品扫描处理方法
    handleGoodsScan(scanCode, successCallback, errorCallback) {
      const trimmedCode = scanCode ? scanCode.toString().trim() : "";
      
      if (!trimmedCode) {
        this.playError && this.playError();
        errorCallback && errorCallback("无效的二维码！");
        return;
      }
      
      // 根据业务类型处理不同的扫码逻辑
      if (this.processScanCode) {
        this.processScanCode(trimmedCode, successCallback, errorCallback);
      } else {
        // 默认处理方式
        successCallback && successCallback(trimmedCode);
      }
    }
  },
  
  // 页面激活状态管理
  onShow() {
    this.isPageActive = true;
    console.log('页面显示，设置 isPageActive 为 true');
  },
  
  onHide() {
    this.isPageActive = false;
  },
  
  onUnload() {
    this.isPageActive = false;
    this.unregisterScanBroadcast();
  }
}
