package com.greenorange.promotion.service.userInfo;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.greenorange.promotion.model.dto.advancementApply.AdvancementApplyApproveRequest;
import com.greenorange.promotion.model.dto.userInfo.*;
import com.greenorange.promotion.model.entity.AdvancementApply;
import com.greenorange.promotion.model.entity.UserInfo;
import com.greenorange.promotion.model.enums.UserRoleEnum;

import java.util.List;

/**
* @author 35880
* @description 针对表【user_info(用户基本信息表)】的数据库操作Service
* @createDate 2025-04-24 11:47:37
*/
public interface UserInfoService extends IService<UserInfo> {


    /**
     * 获取查询条件
     */
    QueryWrapper<UserInfo> getQueryWrapper(UserInfoQueryRequest userInfoQueryRequest);


    /**
     * web端用户登录
     */
    String userInfoLogin(UserInfoLoginRequest userInfoLoginRequest);


    /**
     * 小程序用户注册
     */
    void userInfoMiniRegister(UserInfoRegisterRequest userInfoRegisterRequest);


    /**
     * 小程序端用户密码登录
     */
    String userInfoMiniLoginByPwd(UserInfoMiniPasswordLoginRequest userInfoMiniPasswordLoginRequest);


    /**
     * 小程序用户验证码登录
     */
    String userInfoMiniLoginByVcd(UserInfoMiniVerifyCodeLoginRequest userInfoMiniVerifyCodeLoginRequest);


    /**
     * 小程序用户重置密码
     */
    void userInfoMiniResetPwd(UserInfoResetRequest userInfoResetRequest, boolean isInner);


    /**
     * 小程序用户获取验证码（用于密码登录和忘记密码）
     */
    String getVerificationCodeForPwdLogin(VerificationCodeGetRequest verificationCodeGetRequest);


    /**
     * 小程序用户获取验证码（用于注册）
     */
    String getVerificationCodeForRegister(VerificationCodeGetRequest verificationCodeGetRequest);


    /**
     * 校验用户手机号和验证码
     */
    void checkPhoneAndVerificationCode(String phoneNumber, String verificationCode, UserRoleEnum userRoleEnum);


    /**
     * 根据用户权限来获取查询条件
     */
    LambdaQueryWrapper<UserInfo> getQueryWrapperByUserRole(UserRoleEnum userRoleEnum, LambdaQueryWrapper<UserInfo> lambdaQueryWrapper);


    /**
     * 小程序端员工信息注册
     */
    void staffUserInfoMiniRegister(AdvancementApplyApproveRequest advancementApplyApproveRequest);


    /**
     * 获取小程序用户的查询条件
     */
    LambdaQueryWrapper<UserInfo> getMiniUserInfoQueryWrapper();


    /**
     * 查询从 userId 一路到根节点的所有 id，按 depth 倒序（根先出）
     */
    List<Long> findPathToRoot(Long userId);


    /**
     * 查询当前用户的所有下级用户（包括间接）
     */
    List<Long> findAllSubUser(Long userId);


}
