package com.zhentao.service;

import com.zhentao.entity.PointsDetail;
import com.zhentao.entity.PointsOrder;
import com.zhentao.entity.PointsProduct;
import com.zhentao.entity.PointRule;

import java.util.List;
import java.util.Map;

/**
 * 积分商城服务接口
 */
public interface PointsMallService {
    
    /**
     * 获取商品列表
     * @param category 分类(可选)
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 商品列表
     */
    Map<String, Object> getProductList(Integer category, Integer pageNum, Integer pageSize);
    
    /**
     * 获取推荐商品
     * @param limit 数量限制
     * @return 推荐商品列表
     */
    List<PointsProduct> getRecommendProducts(Integer limit);
    
    /**
     * 获取商品详情
     * @param productId 商品ID
     * @return 商品详情
     */
    PointsProduct getProductDetail(Long productId);
    
    /**
     * 获取红娘积分余额
     * @param makerId 红娘ID
     * @return 积分余额
     */
    Integer getPointsBalance(Long makerId);
    
    /**
     * 获取积分明细
     * @param makerId 红娘ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 积分明细列表
     */
    Map<String, Object> getPointsRecords(Long makerId, Integer pageNum, Integer pageSize);
    
    /**
     * 获取积分规则列表
     * @return 积分规则列表
     */
    List<PointRule> getPointRules();
    
    /**
     * 兑换商品（提交到后台审核）
     * @param makerId 红娘ID
     * @param productId 商品ID
     * @param quantity 数量
     * @param contactPhone 联系电话
     * @return 订单信息
     */
    PointsOrder exchangeProduct(Long makerId, Long productId, Integer quantity, String contactPhone);
    
    /**
     * 获取兑换订单列表
     * @param makerId 红娘ID
     * @param status 订单状态(可选)
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 订单列表
     */
    Map<String, Object> getOrderList(Long makerId, Integer status, Integer pageNum, Integer pageSize);
    
    /**
     * 获取订单详情
     * @param orderNo 订单编号
     * @return 订单详情
     */
    PointsOrder getOrderDetail(String orderNo);
    
    /**
     * 增加积分(签到、上传线索等)
     * @param makerId 红娘ID
     * @param ruleType 规则类型
     * @param reason 原因描述
     * @return 增加的积分数
     */
    Integer addPoints(Long makerId, Integer ruleType, String reason);
}
