package shop.alien.store.service;

import shop.alien.entity.store.CommonPushChannelConfig;
import shop.alien.entity.store.CommonPushTask;
import shop.alien.store.dto.CommonPushSendResultDto;
import shop.alien.store.dto.CommonPushTargetDto;

import java.util.List;

public interface CommonPushSendService {

    /**
     * 查询当前可参与下发的渠道配置（已启用、凭证完整、未超配额）。
     */
    List<CommonPushChannelConfig> listSendableChannels();

    /**
     * 根据任务目标配置解析推送设备列表。
     */
    List<CommonPushTargetDto> resolveTargets(CommonPushTask task);

    /**
     * 在任务入库前执行多渠道推送。
     */
    CommonPushSendResultDto send(CommonPushTask task);

    /**
     * 任务保存后写入 common_push_task_user 发送记录。
     */
    void saveTaskUserRecords(Long pushTaskId, CommonPushSendResultDto sendResult);

    /**
     * 测试推送：仅向指定 deviceId 发送，不入库、不走审核。
     */
    CommonPushSendResultDto sendTest(String deviceId, String title, String content,
                                     String vendorChannel, String jumpUrl, String platform);
}
