package com.tzld.piaoquan.ad.engine.commons.util;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * RootSessionId 工具类
 * 用于获取 rootSessionId 的尾号，支持从 Apollo 配置中读取倒数第几位
 *
 * @author fanjinyang
 */
@Component
public class RootSessionIdUtil {

    /**
     * 倒数 rootSessionId 的第几个尾号做广告分组，从 0 开始
     * 0 表示最后一位，1 表示倒数第二位，以此类推
     * 默认值为 0（最后一位）
     */
    @Value("${ad.rootsessionid.tail.number:0}")
    private Integer tailNumber;

    /**
     * 获取 rootSessionId 的尾号
     * 根据配置的 tailNumber 从后往前取字符
     *
     * @param rootSessionId 会话ID
     * @return 尾号字符，如果 rootSessionId 为空或长度不足则返回 null
     */
    public String getTail(String rootSessionId) {
        if (StringUtils.isBlank(rootSessionId)) {
            return null;
        }

        // 确保 tailNumber 不为 null
        int index = (tailNumber != null) ? tailNumber : 0;

        // 确保索引不为负数
        if (index < 0) {
            index = 0;
        }

        // 计算实际位置：从后往前数，0 表示最后一位
        int position = rootSessionId.length() - 1 - index;

        // 检查位置是否有效
        if (position < 0 || position >= rootSessionId.length()) {
            return null;
        }

        return String.valueOf(rootSessionId.charAt(position));
    }

    /**
     * 获取配置的尾号位置
     *
     * @return 倒数第几位（从 0 开始）
     */
    public Integer getTailNumber() {
        return tailNumber;
    }
}

