package shop.alien.store.annotation;

import java.lang.annotation.*;

/**
 * 埋点事件注解
 * 用于标注需要埋点的方法
 *
 * @author system
 * @since 2026-01-14
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TrackEvent {

    /**
     * 事件类型
     */
    String eventType();

    /**
     * 事件分类
     * TRAFFIC-流量数据
     * INTERACTION-互动数据
     * COUPON-优惠券
     * VOUCHER-代金券
     * SERVICE-服务质量
     * PRICE-价目表
     */
    String eventCategory();

    /**
     * 店铺ID的SpEL表达式，如 "#storeId" 或 "#{#store.id}"
     * 如果不指定，将从请求参数或Session中获取
     */
    String storeId() default "";

    /**
     * 目标对象ID的SpEL表达式，如 "#targetId" 或 "#{#price.id}"
     */
    String targetId() default "";

    /**
     * 目标对象类型
     */
    String targetType() default "";

    /**
     * 用户ID的SpEL表达式
     * 如果不指定，将从JWT token中获取
     */
    String userId() default "";

    /**
     * 是否异步执行
     * true: 异步执行，不阻塞主流程
     * false: 同步执行
     */
    boolean async() default true;
}