package com.gxwebsoft.shop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.shop.entity.ShopDealerReferee;
import com.gxwebsoft.shop.param.ShopDealerRefereeParam;

import java.util.List;

/**
 * 分销商推荐关系表Service
 *
 * @author 科技小王子
 * @since 2025-08-11 23:51:41
 */
public interface ShopDealerRefereeService extends IService<ShopDealerReferee> {

    /**
     * 分页关联查询
     *
     * @param param 查询参数
     * @return PageResult<ShopDealerReferee>
     */
    PageResult<ShopDealerReferee> pageRel(ShopDealerRefereeParam param);

    /**
     * app端查询用户层级关系
     * @param param
     * @return
     */
    PageResult<ShopDealerReferee> appPage(ShopDealerRefereeParam param);

    /**
     * 关联查询全部
     *
     * @param param 查询参数
     * @return List<ShopDealerReferee>
     */
    List<ShopDealerReferee> listRel(ShopDealerRefereeParam param);

    /**
     * 根据id查询
     *
     * @param id 主键ID
     * @return ShopDealerReferee
     */
    ShopDealerReferee getByIdRel(Integer id);

    ShopDealerReferee getByUserIdRel(Integer userId);

    /**
     * 绑定分销商推荐关系(一级)。
     * <p>
     * 规则：
     * <ul>
     *   <li>仅首次绑定生效：已存在(同一tenant、同一user、level=1)则不改绑</li>
     *   <li>建议配合唯一索引保证并发幂等：UNIQUE(tenant_id, user_id, level)</li>
     * </ul>
     *
     * @return true=本次新绑定写入成功；false=已绑定(幂等)
     */
    boolean bindFirstLevel(Integer dealerId, Integer userId, Integer tenantId, String source, String scene);
}
