package com.trade.admin.enterprise.customer.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.trade.admin.enterprise.customer.domain.CustomerReferralCode;
import com.trade.admin.enterprise.customer.domain.SearchCustomerReferralCode;
import com.trade.common.core.page.GridPage;

import java.util.Map;

/**
 * @description: 客户推荐码业务类
 * @Author: wanglang
 * @Date: 2024/5/29 10:44
 * @Version: 1.0
 */
public interface CustomerReferralCodeService extends IService<CustomerReferralCode> {

    /**
     * 推荐码配置分页查询
     *
     * @param search
     * @return GridPage<CustomerReferralCode>
     */
    GridPage<CustomerReferralCode> findBySearch(SearchCustomerReferralCode search);

    /**
     * 新增渠道邀请码配置信息
     *
     * @param code 渠道邀请码配置信息对象
     * @return boolean true成功、否则失败
     */
    boolean add(CustomerReferralCode code);

    /**
     * 获取BD、推广合作方、管理合作方角色下的所有用户
     *
     * @return Map<String,Object>
     */
    Map<String, Object> getDetailForAdd();

    /**
     * 获取BD、推广合作方、管理合作方角色下的所有用户
     *
     * @param customerReferralCodeId 推荐码配置信息ID
     * @return Map<String,Object>
     */
    Map<String, Object> getDetailForUpdate(Long customerReferralCodeId);

    /**
     * 修改
     *
     * @param code 推荐码配置信息 实体类
     * @return boolean true表示成功、false表示失败
     */
    boolean update(CustomerReferralCode code);

    /**
     * 禁用
     *
     * @param customerReferralCodeId 推荐码配置的ID
     * @return boolean true表示成功、false表示失败
     */
    boolean disable(Long customerReferralCodeId);

    /**
     * 启用
     *
     * @param customerReferralCodeId 推荐码配置的ID
     * @return boolean true表示成功、false表示失败
     */
    boolean enable(Long customerReferralCodeId);

    /**
     * 是否有配置的有客户推荐码
     *
     * @param userId 用户ID
     * @return boolean true 表示有配置客户推荐码，false表示没有配置客户推荐码
     */
    boolean isCustomerReferralCode(Long userId, String roleName);

    /**
     * 整个模块中：推荐码唯一
     *
     * @param referralCode
     * @return CustomerReferralCode
     */
    CustomerReferralCode getByReferralCode(String referralCode);

    /**
     * 整个模块中：唯一
     *
     * @param urlSuffix
     * @return CustomerReferralCode
     */
    CustomerReferralCode getByReferralUrlSuffix(String urlSuffix);

    /**
     * 验证C端输入推荐码的正确性
     *
     * @param referralCode 推荐码
     * @return boolean
     */
    boolean checkCode(String referralCode);

    /**
     * 查看推荐码详情
     *
     * @param customerReferralCodeId 推荐码ID
     * @return CustomerReferralCode 推荐码详情
     */
    CustomerReferralCode getDetailForView(Long customerReferralCodeId);

    /**
     * @param customerReferralCodeId 推荐码ID
     * @return true删除成功；false删除失败
     */
    Boolean delete(Long customerReferralCodeId);

    /**
     * 整个模块中：推荐码唯一
     * 
     * @param customerReferralCodeId
     * @return true 表示有配置客户推荐码，false表示没有配置客户推荐码
     */
    Boolean occupied(Long customerReferralCodeId);

    /**
     * 获取推荐码
     * 
     * @param userId 用户id
     * @return CustomerReferralCode
     */
    CustomerReferralCode getByUserId(Long userId);
}
