package mobvista.dmp.datasource.rtdmp

import scala.collection.mutable

/**
 * @package: mobvista.dmp.datasource.rtdmp
 * @author: wangjf
 * @date: 2020/7/13
 * @time: 11:22 上午
 * @email: jinfeng.wang@mobvista.com
 * @phone: 152-1062-7698
 */
object Constant {

  case class Device(device_id: String)

  case class AudienceInfoPre(devid: String, audience_ids: String, device_type: String)

  case class AudienceInfo(devid: String, audience_data: String, old_audience_data: String)

  case class NewAudienceInfo(devid: String, update_time: String, audience_data: String, device_type: String)

  case class AudienceRegion(audience_info: String, region: mutable.WrappedArray[String])

  case class DmpDeviceRegin(device_id: String, device_type: String, platform: String, region: String, update_date: String, publish_date: String, tag: Int)

  // case class AudienceMerge(devid: String, audience_id: mutable.WrappedArray[Int], update_time: String) extends Serializable

  case class AudienceMerge(devid: String, audience_map: String, update_time: String, device_type: String) extends Serializable

  val read_sql =
    """
      |SELECT CASE WHEN isDeviceMd5(device_id) THEN device_id ELSE md5(device_id) END AS device_id, device_type,region
      | FROM dwh.dmp_device_region WHERE dt = '@dt' AND tag = 1
      |""".stripMargin

  val old_sql =
    """
      |SELECT device_id, device_type, platform, region, update_date, publish_date
      |  FROM dwh.dmp_device_region WHERE dt = '@dt' AND update_date >= '@update_date'
      |""".stripMargin

  val merge_sql =
    s"""SELECT
       |  COALESCE(d.device_id,m.device_id) device_id,
       |  COALESCE(d.device_type,m.device_type) device_type,
       |  COALESCE(d.platform,m.platform) platform,
       |  CASE WHEN d.device_id IS NOT null AND m.device_id IS NOT null THEN parseRegion(CONCAT(m.region, ',', d.region))
       |  WHEN d.device_id IS NOT null THEN d.region ELSE m.region END AS region,
       |  CASE WHEN d.device_id IS NOT null THEN '@before_date' ELSE m.update_date END AS update_date,
       |  CASE WHEN m.device_id IS NOT null THEN check_publish(check_region(m.region,d.region),'@before_date',m.publish_date)
       |  ELSE '@before_date' END AS publish_date,
       |  CASE WHEN m.device_id IS NOT null THEN check_tag(check_region(m.region,d.region),'@before_date',m.publish_date) ELSE 1 END AS tag
       |  FROM
       |    (SELECT device_id, device_type, platform, region, update_date, publish_date
       |      FROM dwh.dmp_device_region WHERE dt = '@dt' AND update_date >= '@update_date'
       |    ) m
       |  FULL OUTER JOIN
       |  device_region_daily d
       |  ON d.device_id = m.device_id
       |""".stripMargin

  val region_sql =
    s"""SELECT device_id, MAX(device_type) device_type, MAX(platform) platform, parseRegion(CONCAT_WS(',',COLLECT_SET(region))) region
       |  FROM
       |    (SELECT device_id, device_type, platform, parseToStr(region) region
       |      FROM dwh.etl_dsp_request_daily WHERE `date` = '@date' AND region != '[]' AND check_deviceId(device_id)
       |      GROUP BY device_id, device_type, platform, region
       |      UNION
       |      SELECT device_id, device_type, platform, parseToStr(region) region
       |      FROM dwh.etl_dsp_request_unmatch WHERE `dt` = '@dt' AND datetime >= '@date 00:00:00' AND region != '[]' AND check_deviceId(device_id)
       |      GROUP BY device_id, device_type, platform, region
       |      UNION
       |      SELECT device_id, device_type, platform, region
       |      FROM dwh.etl_adn_request_sdk_daily WHERE `dt` = '@dt' AND region != '' AND check_deviceId(device_id)
       |      GROUP BY device_id, device_type, platform, region
       |      UNION
       |      SELECT device_id, device_type, platform, region
       |      FROM dwh.etl_adn_request_sdk_unmatch WHERE `dt` = '@dt' AND update_date = '@date' AND region != '' AND check_deviceId(device_id)
       |      GROUP BY device_id, device_type, platform, region
       |   ) t
       |  GROUP BY device_id
       |""".stripMargin

  //  AND check_package(package_name)
  val device_sql =
    """
      |SELECT device_id, device_type, platform, package_name
      |   FROM dwh.@table WHERE dt = '@dt' AND business = '@business' @check_update_date @check_package @check_hr
      |   GROUP BY device_id, device_type, platform, package_name
      |""".stripMargin

  val tencent_device_sql =
    """
      |SELECT device_id, device_type, platform, package_name
      |   FROM dwh.@table WHERE dt = '@dt' @check_package @check_hr
      |   GROUP BY device_id, device_type, platform, package_name
      |""".stripMargin

  val package_sql =
    """
      |SELECT device_type, platform, package_name
      |   FROM dwh.dm_install_list_v2 WHERE dt = '@dt' AND business = '@business' AND update_date = '@update_date' AND package_name IN (@filter_package)
      |   GROUP BY device_type, platform, package_name
      |""".stripMargin

  val device_info_sql =
    """
      |SELECT device_id, device_type, processToRegion(ext_data) region
      |  FROM dwh.dmp_install_list WHERE dt = '@dt' AND business = 'day'
      |""".stripMargin

  val foractivationIdSet: mutable.Set[Integer] = mutable.Set(7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 108,
    109, 110, 111, 112, 122, 123, 180, 181, 182, 185, 186, 196, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
    217, 237, 238, 333, 334, 335, 336, 337, 338, 339, 340, 343, 344, 349, 350, 352, 353, 354, 355, 356, 357, 358,
    359, 360, 367, 369, 370, 374, 375, 376, 377, 380, 381, 382, 383, 369, 384, 385, 386, 387, 388, 389, 390, 391,
    392, 393, 394, 395, 396, 405, 406, 407)

  //  val dspIdSet: mutable.Set[Integer] = mutable.Set(7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 108, 109, 110, 111, 112, 122, 123, 180, 181, 182)

  val adxIdSet: mutable.Set[Integer] = mutable.Set(115, 187, 190, 218, 281, 364, 368)

}