class NotificationStatistic < ApplicationRecord

  # 当前app端传递的platform的值:
  # android: igetui, xiaomi, huawei
  # iso: igetui 目前还不清楚为啥不用apns,暂时不修改
  enum platform: %i[igetui apns xiaomi huawei]

  enum device_platform: %i[ios android]

  # 用于区分当前的应用,为了推送准备, 因为推送需要根据不同的应用使用不同的 id,secret等。
  enum app_type: %i[ik_duli lx_duli lx_yun aike_yun]

  def self.create_by_params(igetui_opts, message, device_ids_opts, app_type)
    igetui_opts = igetui_opts.with_indifferent_access
    message = message.with_indifferent_access
    device_ids_opts = device_ids_opts.with_indifferent_access

    device_ids_opts.each do |platform, client_ids|
      client_ids.each do |client_id|
        next if message[:id].blank?

        NotificationStatistic.create(
          organization_id: igetui_opts[:organization_id],
          user_id: message[:user_id] || igetui_opts[:user_id],
          notification_id: message[:id],
          client_id: client_id,
          platform: platform,
          device_platform: igetui_opts[:device_platform],
          app_type: app_type,
          ip: igetui_opts[:ip],
        )
      end
    end
  rescue => e
    Rails.logger.info "exception is #{e}"
    e.backtrace.each { |l| Rails.logger.info l }
  end



  def self.static_notification(opts, client_ids, platform, device_platform=nil)
    ::Log.info("统计数据开始 opts is #{opts.to_json} client_ids is #{client_ids} platform is #{platform} device_platform is #{device_platform}")
    if client_ids.is_a? Array
      client_ids.each do |client_id|
        next if opts[:message][:notifiable_id].blank?
      
        NotificationStatistic.create(
          organization_id: opts[:igetui_opts][:organization_id],
          user_id: opts[:igetui_opts][:user_id],
          notification_id: opts[:message][:notifiable_id],
          client_id: client_id,
          platform: platform,
          device_platform: device_platform,
          app_type: opts[:app_type],
          ip: opts[:igetui_opts][:ip],
        )
      end
    end
  rescue => e
    ::Log.info "exception is #{e}"
    e.backtrace.each { |l| ::Log.error l }
  end

end