package com.tashow.cloud.userapi.api.user;

import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.userapi.api.user.dto.UserMemberRespDTO;
import com.tashow.cloud.userapi.enums.ApiConstants;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import static com.tashow.cloud.common.util.collection.CollectionUtils.convertMap;

/**
 * RPC 服务 - 会员用户
 */
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿：fallbackFactory =
public interface UserMemberApi {

    String PREFIX = ApiConstants.PREFIX + "/member";


    /**
     * 获得会员用户 Map
     *
     * @param ids 用户编号的数组
     * @return 会员用户 Map
     */
    default Map<Long, UserMemberRespDTO> getUserMap(Collection<Long> ids) {
        List<UserMemberRespDTO> list = getUserList(ids).getCheckedData();
        return convertMap(list, UserMemberRespDTO::getId);
    }

    /**
     * 获得会员用户信息
     * @param id 编号
     * @return
     */
    @GetMapping(PREFIX + "/get")
    CommonResult<UserMemberRespDTO> getUser(@RequestParam("id") Long id);

    /**
     * 获得会员用户信息们
     * @param ids 用户编号的数组
     * @return
     */
    @GetMapping(PREFIX + "/list")
    CommonResult<List<UserMemberRespDTO>> getUserList(@RequestParam("ids") Collection<Long> ids);

    /**
     * 基于用户昵称，模糊匹配用户列表
     * @param nickname 用户昵称，模糊匹配
     * @return
     */
    @GetMapping(PREFIX + "/list-by-nickname")
    CommonResult<List<UserMemberRespDTO>> getUserListByNickname(@RequestParam("nickname") String nickname);

    /**
     * 基于手机号，精准匹配用户
     * @param mobile 基于手机号，精准匹配用户
     * @return
     */
    @GetMapping(PREFIX + "/get-by-mobile")
    CommonResult<UserMemberRespDTO> getUserByMobile(@RequestParam("mobile") String mobile);

    /**
     * 校验用户是否存在
     * @param id 用户编号
     * @return
     */
    @GetMapping(PREFIX + "/valid")
    CommonResult<Boolean> validateUser(@RequestParam("id") Long id);

}
