package com.gxwebsoft.cms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.cms.entity.LeadReferral;
import com.gxwebsoft.cms.param.CustomerLeadParam;
import com.gxwebsoft.cms.param.LeadReferralParam;

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

/**
 * 推荐人服务接口（全民推荐）
 *
 * @author 科技小王子
 * @since 2026-04-14
 */
public interface LeadReferralService extends IService<LeadReferral> {

    /**
     * 匿名用户通过推荐码报备客户
     */
    LeadReferral anonymousReferral(LeadReferralParam param);

    /**
     * 注册用户报备客户
     */
    LeadReferral userReferral(LeadReferralParam param);

    /**
     * 获取推荐人的推荐记录
     */
    Map<String, Object> getReferralPage(CustomerLeadParam param);

    /**
     * 获取推荐人的推荐统计
     */
    Map<String, Object> getReferralStats(Integer userId);

    /**
     * 生成推荐码
     */
    String generateReferralCode();

    /**
     * 根据推荐码获取推荐人信息
     */
    Map<String, Object> getReferrerByCode(String referralCode);

    /**
     * 确认推荐有效
     */
    boolean confirmReferral(Integer referralId);

    /**
     * 作废推荐
     */
    boolean invalidateReferral(Integer referralId, String reason);

    /**
     * 结算推荐费
     */
    boolean settleReferral(Integer referralId);

    /**
     * 批量结算推荐费
     */
    Map<String, Object> batchSettleReferrals(Integer[] referralIds);

    /**
     * 计算推荐费（根据成交金额和配置比例）
     */
    BigDecimal calculateReferralFee(BigDecimal dealAmount);
}
