package shop.alien.store.service;

import shop.alien.entity.store.StoreTrackEvent;

import java.util.Date;
import java.util.List;

/**
 * 埋点事件服务接口
 *
 * @author system
 * @since 2026-01-14
 */
public interface TrackEventService {

    /**
     * 保存埋点事件（异步写入Redis）
     *
     * @param trackEvent 埋点事件
     */
    void saveTrackEvent(StoreTrackEvent trackEvent);

    /**
     * 批量保存埋点事件（写入数据库）
     *
     * @param trackEvents 埋点事件列表
     */
    void batchSaveTrackEvents(List<StoreTrackEvent> trackEvents);

    /**
     * 计算并保存统计数据
     *
     * @param id              店铺ID
     * @param lastWeekMonday  上周一的日期
     * @param weekly          统计类型（DAILY/WEEKLY/MONTHLY）
     */
    void calculateAndSaveStatistics(Integer id, Date lastWeekMonday, String weekly);
    
    /**
     * 统计店铺当前总浏览量
     *
     * @param storeId 店铺ID
     * @return 浏览量
     */
    Long getStoreViewCount(Integer storeId);

    /**
     * 店铺浏览（访问）次数，区间两端均闭区间，口径与 {@link #getStoreViewCount} 一致
     */
    Long countStoreViewEventsBetweenInclusive(Integer storeId, Date startInclusive, Date endInclusive);
}