package com.microservices.zone.member.service;

import com.microservices.zone.member.domain.points.ZonePointsTransaction;
import com.microservices.zone.member.domain.vo.ZonePointsTransactionInputVo;
import com.microservices.zone.member.domain.vo.ZonePointsTransactionUpdateVo;

import java.util.List;

/**
 * 专区积分流水Service接口（合并事件+流水）
 *
 * @author otto
 */
public interface IZonePointsTransactionService {
    /**
     * 查询专区积分流水
     *
     * @param id 专区积分流水主键
     * @return 专区积分流水
     */
    public ZonePointsTransaction selectZonePointsTransactionById(Long id);

    /**
     * 查询专区积分流水列表
     *
     * @param zonePointsTransaction 专区积分流水
     * @return 专区积分流水集合
     */
    public List<ZonePointsTransaction> selectZonePointsTransactionList(ZonePointsTransaction zonePointsTransaction);

    /**
     * 新增专区积分流水
     *
     * @param inputVo 专区积分流水
     * @return 结果
     */
    public int insertZonePointsTransaction(ZonePointsTransactionInputVo inputVo);

    /**
     * 修改专区积分流水
     *
     * @param updateVo 专区积分流水
     * @return 结果
     */
    public int updateZonePointsTransaction(ZonePointsTransactionUpdateVo updateVo);

    /**
     * 删除专区积分流水信息
     *
     * @param id 专区积分流水主键
     * @return 结果
     */
    public int deleteZonePointsTransactionById(Long id);

    /**
     * 根据事件ID查询流水列表
     *
     * @param eventId 事件ID
     * @return 专区积分流水列表
     */
    List<ZonePointsTransaction> selectZonePointsTransactionByEventId(String eventId);

    /**
     * 根据账户ID查询流水列表
     *
     * @param accountId 积分账户ID
     * @return 专区积分流水列表
     */
    List<ZonePointsTransaction> selectZonePointsTransactionByAccountId(Long accountId);

    /**
     * 根据用户ID和专区ID查询流水列表
     *
     * @param userId 用户ID
     * @param zoneId 专区ID
     * @return 专区积分流水列表
     */
    List<ZonePointsTransaction> selectZonePointsTransactionByUserIdAndZoneId(Long userId, Long zoneId);

    /**
     * 根据专区ID获取当前用户积分明细（分页）
     *
     * @param zoneId 专区ID
     * @param userId 用户ID
     * @param transactionType 交易类型（可选）
     * @return 专区积分流水列表
     */
    List<ZonePointsTransaction> selectMyPointsTransactionDetailsByZone(Long zoneId, Long userId, String transactionType);

    /**
     * 查询当前用户流水列表（合并后直接从流水表查询，所有业务字段已包含）
     *
     * @param userId 用户ID
     * @param zoneId 专区ID
     * @return 专区积分流水列表
     */
    List<ZonePointsTransaction> selectCurrentUserTransactionWithEvent(Long userId, Long zoneId);
}