require 'jsonclient'

class Wechat::ShakeAround::Beacon

  extend ::Wechat::ShakeAround::Common

  # 查询设备列表
  # http://mp.weixin.qq.com/wiki/15/b9e012f917e3484b7ed02771156411f3.html#.E6.9F.A5.E8.AF.A2.E8.AE.BE.E5.A4.87.E5.88.97.E8.A1.A8
  #
  # Return hash format if success:
  # {
  #   data:
  #   {
  #     devices:
  #     [
  #       {
  #         comment:          '',
  #         device_id:        <DEVICE_ID>,
  #         major:            <MAJOR>,
  #         minor:            <MINOR>,
  #         status:           <STATUS>,           // 激活状态,0:未激活,1:已激活
  #         last_active_time: <LAST_ACTIVE_TIME>, // 设备最近一次被摇到的日期(最早只能获取前一天的数据);新申请的设备该字段值为0 
  #         poi_id:           <POI_ID>,           // 设备关联的门店ID,关联门店后,在门店1KM的范围内有优先摇出信息的机会。门店相关信息具体可查看门店相关的接口文档
  #         uuid:             <UUID>
  #       }
  #     ],
  #     total_count: <TOTAL_COUNT> // 商户名下的设备总量
  #   },
  #   errcode: 0,
  #   errmsg:  'success.'
  # }
  def self.index(access_token, offset, limit, apply_id = nil)
    options = { begin: offset, count: limit }
    if apply_id.present?
      options[:apply_id] = apply_id
      options[:type]     = 3
    else
      options[:type]     = 2
    end
    message = ::JSONClient.new.post "https://api.weixin.qq.com/shakearound/device/search?access_token=#{access_token}", options
    message.body
  end

  # 查询设备
  # http://mp.weixin.qq.com/wiki/15/b9e012f917e3484b7ed02771156411f3.html#.E6.9F.A5.E8.AF.A2.E8.AE.BE.E5.A4.87.E5.88.97.E8.A1.A8
  #
  # Return hash format if success:
  # {
  #   data:
  #   {
  #     devices:
  #     [
  #       {
  #         comment:          '',
  #         device_id:        <DEVICE_ID>,
  #         major:            <MAJOR>,
  #         minor:            <MINOR>,
  #         status:           <STATUS>,           // 激活状态,0:未激活,1:已激活
  #         last_active_time: <LAST_ACTIVE_TIME>, // 设备最近一次被摇到的日期(最早只能获取前一天的数据);新申请的设备该字段值为0 
  #         poi_id:           <POI_ID>,           // 设备关联的门店ID,关联门店后,在门店1KM的范围内有优先摇出信息的机会。门店相关信息具体可查看门店相关的接口文档
  #         uuid:             <UUID>
  #       }
  #     ],
  #     total_count: <TOTAL_COUNT> // 商户名下的设备总量
  #   },
  #   errcode: 0,
  #   errmsg:  'success.'
  # }
  #
  # device_id is an integer or a hash like { uuid: <UUID>, major: <MAJOR>, minor: <MINOR> }.
  def self.load(access_token, device_id)
    device_identifier = self.normalize_device_id device_id
    message = ::JSONClient.new.post "https://api.weixin.qq.com/shakearound/device/search?access_token=#{access_token}",
      {
        type:               1,
        device_identifiers: [ device_identifier ]
      }
    message.body
  end

  # 编辑设备信息
  # http://mp.weixin.qq.com/wiki/15/b9e012f917e3484b7ed02771156411f3.html#.E7.BC.96.E8.BE.91.E8.AE.BE.E5.A4.87.E4.BF.A1.E6.81.AF
  #
  # Return hash format if success:
  # {
  #   data:    {},
  #   errcode: 0,
  #   errmsg:  'success.'
  # }
  #
  # device_id is an integer or a hash like { uuid: <UUID>, major: <MAJOR>, minor: <MINOR> }.
  def self.update(access_token, device_id, comment)
    device_identifier = self.normalize_device_id device_id
    message = ::JSONClient.new.post "https://api.weixin.qq.com/shakearound/device/update?access_token=#{access_token}",
      {
        device_identifier: device_identifier,
        comment:           comment
      }
    message.body
  end

end