package shop.alien.dining.service;

import shop.alien.dining.dto.ChangePhoneDto;
import shop.alien.dining.dto.UserProfileUpdateDto;
import shop.alien.dining.vo.DiningUserVo;
import shop.alien.dining.vo.TokenVerifyVo;

/**
 * 点餐用户服务接口
 *
 * @author ssk
 * @version 1.0
 * @date 2024/12/4
 */
public interface DiningUserService {

    /**
     * 微信小程序登录（标准流程：通过 code2session 获取 openid）
     *
     * @param code      微信登录凭证（通过 wx.login() 获取，必填）
     * @param phoneCode 手机号凭证（通过 wx.getPhoneNumber() 获取，可选）
     * @param macIp     客户端IP地址
     * @return 用户信息（包含 token）
     */
    DiningUserVo wechatLogin(String code, String phoneCode, String macIp);

    /**
     * 更新用户个人信息
     *
     * @param dto 用户信息更新DTO
     * @return 更新后的用户信息
     */
    DiningUserVo updateProfile(UserProfileUpdateDto dto);

    /**
     * 获取用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    DiningUserVo getUserInfo(Long userId);

    /**
     * 更换手机号：Feign 调 store 校验验证码后更新 user_phone
     *
     * @param dto 更换手机号请求
     * @return 更新后的用户信息，失败返回 null
     */
    DiningUserVo changePhone(ChangePhoneDto dto);

    /**
     * 校验 Token 是否有效
     *
     * @param token Token字符串
     * @return Token校验结果，包含用户信息和验证状态
     */
    TokenVerifyVo verifyToken(String token);
}
