import axios, { type AxiosResponse } from 'axios';
import type { RejisterRequest , ResetPasswordRequest} from './type';
import type{ LoginRequest } from './type';
import type { CommonResponse } from '../type';

class AuthAPI {

    static sendVerificationCode(email: string): Promise<AxiosResponse<CommonResponse>> {
        return axios.post('/api/auth/user/sendVerification', { email });
    }

    static register(request: RejisterRequest): Promise<AxiosResponse<CommonResponse>> {
        return axios.post('/api/auth/user/register', request);
    }

    static sendResetCode(email: string):Promise<AxiosResponse<CommonResponse>> {
        return axios.post('/api/auth/user/sendResetCode', { email });
    }

    static resetPassword( request: ResetPasswordRequest ):Promise<AxiosResponse<CommonResponse>> {
        return axios.post('/api/auth/user/resetPassword', request);
    }
    

    static refreshToken(oldToken : string): Promise<AxiosResponse<CommonResponse<string>>> {
        return axios.post(
            '/api/auth/refreshToken',
            {}, // 请求体空
            {
                headers: {
                    token: oldToken,
                },
            }
        );
    }
    
    
    static login(loginRequest: LoginRequest): Promise<AxiosResponse<CommonResponse<string>>> {
        return axios.post('/api/auth/user/login', loginRequest);
    }

}

export default AuthAPI;

