package com.adx.tencent.honor; import java.util.List; import java.util.Map; public class HonorPlacement { private long baiduMediaId; private String baiduAppId; private String baiduTagId; private Map platforms; private long bidFloor; private List actionTypes; public long getBaiduMediaId() { return baiduMediaId; } public void setBaiduMediaId(long v) { this.baiduMediaId = v; } public String getBaiduAppId() { return baiduAppId; } public void setBaiduAppId(String v) { this.baiduAppId = v; } public String getBaiduTagId() { return baiduTagId; } public void setBaiduTagId(String v) { this.baiduTagId = v; } public Map getPlatforms() { return platforms; } public void setPlatforms(Map v) { this.platforms = v; } public long getBidFloor() { return bidFloor; } public void setBidFloor(long v) { this.bidFloor = v; } public List getActionTypes() { return actionTypes; } public void setActionTypes(List v) { this.actionTypes = v; } public Resolved resolve(Map params) { String tagId = firstParam(params, "tagId", "tag_id", "baidu_tag_id"); if (tagId != null && !tagId.isBlank()) { Resolved r = resolveByTagId(tagId); if (r != null) return r; throw new IllegalArgumentException("unknown honor baidu tag id: " + tagId); } String platform = normalizePlatform(firstParam(params, "platform", "os", "system", "device_os")); if (platform != null && !platform.isBlank()) { Resolved r = resolveByPlatform(platform); if (r != null) return r; throw new IllegalArgumentException("unsupported honor baidu platform: " + platform); } if (baiduAppId != null && !baiduAppId.isBlank() && baiduTagId != null && !baiduTagId.isBlank()) { return new Resolved(null, baiduAppId, baiduTagId); } if (platforms != null && platforms.size() == 1) { String p = platforms.keySet().iterator().next(); Resolved r = resolveByPlatform(p); if (r != null) return r; } throw new IllegalArgumentException("missing honor tagId or platform"); } private Resolved resolveByTagId(String tagId) { if (platforms != null) { for (Map.Entry e : platforms.entrySet()) { HonorAppPlacement p = e.getValue(); if (p.getAppId() != null && p.getTagIds() != null && p.getTagIds().contains(tagId)) { return new Resolved(e.getKey(), p.getAppId(), tagId); } } } if (baiduAppId != null && tagId.equals(baiduTagId)) { return new Resolved(null, baiduAppId, baiduTagId); } return null; } private Resolved resolveByPlatform(String platform) { if (platforms == null) return null; HonorAppPlacement p = platforms.get(platform); if (p == null || p.getAppId() == null || p.getTagIds() == null || p.getTagIds().isEmpty()) { return null; } if (p.getTagIds().size() > 1) { throw new IllegalArgumentException( "tagId is required for honor platform " + platform + " because multiple tag ids are configured"); } return new Resolved(platform, p.getAppId(), p.getTagIds().get(0)); } private static String firstParam(Map p, String... keys) { if (p == null) return null; for (String k : keys) { String v = p.get(k); if (v != null && !v.isBlank()) return v.trim(); } return null; } static String normalizePlatform(String value) { if (value == null) return null; return switch (value.toLowerCase().trim()) { case "ios", "iphone", "ipad", "1" -> "ios"; case "android", "安卓", "0", "2" -> "android"; default -> null; }; } public static class HonorAppPlacement { private String appId; private List tagIds; public String getAppId() { return appId; } public void setAppId(String v) { this.appId = v; } public List getTagIds() { return tagIds; } public void setTagIds(List v) { this.tagIds = v; } } public record Resolved(String platform, String appId, String tagId) {} }