package org.dromara.member.service;

import com.baomidou.mybatisplus.extension.service.IService;
import me.zhyd.oauth.model.AuthUser;
import org.dromara.member.domain.AppSocialAuth;
import org.dromara.member.domain.vo.AppSocialAuthVo;
import org.dromara.member.domain.vo.AppUserVo;

import java.util.List;

/**
 * App端第三方登录授权Service接口
 *
 * @author pengles
 */
public interface AppSocialAuthService extends IService<AppSocialAuth> {

    /**
     * 查询App端第三方登录授权
     *
     * @param id 主键
     * @return App端第三方登录授权
     */
    AppSocialAuthVo queryById(Long id);

    /**
     * 根据用户ID查询社交认证列表
     *
     * @param userId 用户ID
     * @return 社交认证列表
     */
    List<AppSocialAuthVo> queryByUserId(Long userId);

    /**
     * 根据平台和openId查询社交认证
     *
     * @param platform 平台
     * @param openId   openId
     * @return 社交认证信息
     */
    AppSocialAuth queryByPlatformAndOpenId(String platform, String openId);

    /**
     * 根据平台和unionId查询社交认证
     *
     * @param platform 平台
     * @param unionId  unionId
     * @return 社交认证信息
     */
    AppSocialAuth queryByPlatformAndUnionId(String platform, String unionId);

    /**
     * 新增App端第三方登录授权
     *
     * @param appSocialAuth App端第三方登录授权
     * @return 结果
     */
    Boolean insertAppSocialAuth(AppSocialAuth appSocialAuth);

    /**
     * 修改App端第三方登录授权
     *
     * @param appSocialAuth App端第三方登录授权
     * @return 结果
     */
    Boolean updateAppSocialAuth(AppSocialAuth appSocialAuth);

    /**
     * 删除App端第三方登录授权
     *
     * @param id 主键
     * @return 结果
     */
    Boolean deleteAppSocialAuthById(Long id);

    /**
     * 根据用户ID删除社交认证
     *
     * @param userId 用户ID
     * @return 结果
     */
    Boolean deleteByUserId(Long userId);

    /**
     * 更新访问令牌
     *
     * @param id           主键
     * @param accessToken  访问令牌
     * @param expireIn     过期时间
     * @param refreshToken 刷新令牌
     * @return 结果
     */
    Boolean updateAccessToken(Long id, String accessToken, Integer expireIn, String refreshToken);

    /**
     * 根据用户ID和平台删除绑定关系
     *
     * @param userId   用户ID
     * @param platform 第三方平台
     * @return 是否成功
     */
    Boolean deleteByUserIdAndPlatform(Long userId, String platform);

    /**
     * 根据平台和openId查询绑定的用户信息
     *
     * @param platform 平台
     * @param openId   openId
     * @return 用户信息
     */
    AppUserVo selectUserByPlatformAndOpenId(String platform, String openId);

    /**
     * 根据平台和unionId查询绑定的用户信息
     *
     * @param platform 平台
     * @param unionId  unionId
     * @return 用户信息
     */
    AppUserVo selectUserByPlatformAndUnionId(String platform, String unionId);

    /**
     * 绑定第三方用户
     *
     * @param authUserData 授权响应实体
     */
    void socialRegister(AuthUser authUserData);

}
