package com.gxwebsoft.common.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.entity.TenantSubscriptionOrder;

/**
 * 租户订阅订单Service
 *
 * @author WebSoft
 * @since 2025-12-12
 */
public interface TenantSubscriptionOrderService extends IService<TenantSubscriptionOrder> {

    /**
     * 创建订阅订单
     *
     * @param packageId 套餐ID
     * @param payType   支付周期 1月付 3季付 12年付
     * @param tenantId  租户ID
     * @param userId    用户ID
     * @return TenantSubscriptionOrder
     */
    TenantSubscriptionOrder createOrder(Integer packageId, Integer payType, Integer tenantId, Integer userId);

    /**
     * 创建试用订单
     *
     * @param tenantId 租户ID
     * @param userId   用户ID
     * @return TenantSubscriptionOrder
     */
    TenantSubscriptionOrder createTrialOrder(Integer tenantId, Integer userId);

    /**
     * 支付订单
     *
     * @param orderNo       订单号
     * @param paymentMethod 支付方式
     * @param paymentId     支付流水号
     * @return boolean
     */
    boolean payOrder(String orderNo, String paymentMethod, String paymentId);

    /**
     * 激活订单（支付成功后调用）
     *
     * @param orderNo 订单号
     * @return boolean
     */
    boolean activateOrder(String orderNo);

    /**
     * 取消订单
     *
     * @param orderNo      订单号
     * @param cancelReason 取消原因
     * @return boolean
     */
    boolean cancelOrder(String orderNo, String cancelReason);

    /**
     * 分页查询租户订单
     *
     * @param tenantId 租户ID
     * @param page     页码
     * @param limit    每页数量
     * @return PageResult<TenantSubscriptionOrder>
     */
    PageResult<TenantSubscriptionOrder> pageByTenant(Integer tenantId, Integer page, Integer limit);

    /**
     * 根据订单号查询
     *
     * @param orderNo 订单号
     * @return TenantSubscriptionOrder
     */
    TenantSubscriptionOrder getByOrderNo(String orderNo);
}
