package com.haha.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.haha.entity.Order;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface OrderService extends IService<Order> {
    
    /**
     * 分页查询订单列表
     *
     * @param page     页码
     * @param pageSize 每页条数
     * @param orderNo  订单号
     * @param deviceId 设备ID
     * @param payStatus 支付状态
     * @param status   订单状态
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 分页结果
     */
    IPage<Order> getPage(int page, int pageSize, String orderNo, String deviceId, 
                         String payStatus, Integer status, String startDate, String endDate);
    
    /**
     * 获取订单详情（带标签填充）
     *
     * @param id 订单ID
     * @return 订单详情
     */
    Order getDetailById(Long id);
    
    /**
     * 获取订单统计数据
     *
     * @return 统计数据
     */
    Map<String, Object> getStatistics();
    
    /**
     * 订单退款
     *
     * @param orderId 订单ID
     * @param reason  退款原因
     * @return 是否成功
     */
    boolean refund(Long orderId, String reason);
    
    List<Order> getOrderListByUserId(Long userId, Integer status);
    boolean cancelOrder(Long orderId);
    boolean updateOrderStatus(Long orderId, Integer status);
    Order getOrderByOutTradeNo(String outTradeNo);
    Order getOrderBydeviceId(String deviceId);
    boolean updatePayStatus(String orderNo, String payStatus);

    /**
     * 根据AI识别结果创建订单
     *
     * @param activityId 活动ID
     * @param deviceId 设备ID
     * @param userId 用户ID
     * @param skuListStr SKU列表JSON字符串
     * @param resourceInfoStr 资源信息JSON字符串
     * @param confidence 识别置信度
     * @return 创建的订单，如果无需创建返回null
     */
    Order createOrderFromRecognition(String activityId, String deviceId, String userId,
                                      String skuListStr, String resourceInfoStr, BigDecimal confidence);

    /**
     * 创建订单并初始化支付分服务订单
     *
     * @param activityId 活动ID
     * @param deviceId 设备ID
     * @param userId 用户ID
     * @param skuListStr SKU列表JSON字符串
     * @param resourceInfoStr 资源信息JSON字符串
     * @param confidence 识别置信度
     * @param openId 用户微信openId（用于支付分）
     * @return 创建的订单
     */
    Order createOrderWithPayScore(String activityId, String deviceId, String userId,
                                   String skuListStr, String resourceInfoStr, BigDecimal confidence,
                                   String openId);

    /**
     * 完结订单并触发支付分扣款
     *
     * @param orderId 订单ID
     * @param totalAmount 最终金额
     * @return 是否成功
     */
    boolean completeOrderWithPayScore(Long orderId, BigDecimal totalAmount);
}
