package com.iailab.module.system.service.auth;

import com.iailab.module.system.controller.admin.auth.vo.*;
import com.iailab.module.system.dal.dataobject.user.AdminUserDO;

import javax.validation.Valid;

/**
 * 膊∞����佂��莅よ� Service �ュ�
 *
 * ��鋐����欠���糸����糸�榊���遵��
 *
 * @author iailab
 */
public interface AdminAuthService {

    /**
     * 薨�莚�茣�� + 鎛�����絋�����菴�鐚���菴�������
     *
     * @param username 茣��
     * @param password 鎛���
     * @return ����
     */
    AdminUserDO authenticate(String username, String password);

    /**
     * 茣�埇�糸�
     *
     * @param reqVO �糸�篆≧��
     * @return �糸�膸���
     */
    AuthLoginRespVO login(@Valid AuthLoginReqVO reqVO);

    /**
     * �坂� token ���榊�糸�
     *
     * @param token token
     * @param logType �糸�榊瓜��
     */
    void logout(String token, Integer logType);

    /**
     * �℡拭薨�莚�������
     *
     * @param reqVO ����莚傑�
     */
    void sendSmsCode(AuthSmsSendReqVO reqVO);

    /**
     * �℡拭�糸�
     *
     * @param reqVO �糸�篆≧��
     * @return �糸�膸���
     */
    AuthLoginRespVO smsLogin(AuthSmsLoginReqVO reqVO) ;

    /**
     * 腓鞘困綽��欠�糸�鐚�篏睡�� code ������
     *
     * @param reqVO �糸�篆≧��
     * @return �糸�膸���
     */
    AuthLoginRespVO socialLogin(@Valid AuthSocialLoginReqVO reqVO);

    /**
     * �傑�域���擦��
     *
     * @param refreshToken �傑�遺擦��
     * @return �糸�膸���
     */
    AuthLoginRespVO refreshToken(String refreshToken);

}