import { api } from '@/api/index'
import type { LoginParam, LoginDomain, ResultDomain } from '@/types'


/**
 * 认证 API
 * 通过 Gateway (8180) 访问 Auth Service (8181)
 * 路由规则：/urban-lifeline/auth/** → auth-service/urban-lifeline/auth/**
 */
export const authAPI = {
    baseUrl: "/urban-lifeline/auth",
    
    /**
     * 用户登录
     * @param loginParam 登录参数
     * @returns 登录结果（包含 token 和用户信息）
     */
    async login(loginParam: LoginParam): Promise<ResultDomain<LoginDomain>> {
        const response = await api.post<LoginDomain>(`${this.baseUrl}/login`, loginParam)
        return response.data
    },
    
    /**
     * 用户登出
     * @returns 登出结果
     */
    async logout(): Promise<ResultDomain<null>> {
        const response = await api.post<null>(`${this.baseUrl}/logout`)
        return response.data
    },
    
    /**
     * 获取验证码（统一接口）
     * @param loginParam 登录参数（包含验证码类型）
     * @returns 验证码结果
     */
    async getCaptcha(loginParam: LoginParam): Promise<ResultDomain<any>> {
        const response = await api.post<any>(`${this.baseUrl}/captcha`, loginParam)
        return response.data
    },
    
    /**
     * 刷新 Token
     * @returns 新的登录信息
     */
    async refreshToken(): Promise<ResultDomain<LoginDomain>> {
        const response = await api.post<LoginDomain>(`${this.baseUrl}/refresh`)
        return response.data
    },
    
    /**
     * 发送邮箱验证码
     * @param email 邮箱地址
     * @returns 发送结果
     */
    async sendEmailCode(email: string): Promise<ResultDomain<null>> {
        const response = await api.post<null>(`${this.baseUrl}/send-email-code`, { email })
        return response.data
    },
    
    /**
     * 发送短信验证码
     * @param phone 手机号
     * @returns 发送结果
     */
    async sendSmsCode(phone: string): Promise<ResultDomain<null>> {
        const response = await api.post<null>(`${this.baseUrl}/send-sms-code`, { phone })
        return response.data
    },
    
    /**
     * 用户注册
     * @param registerData 注册数据
     * @returns 注册结果（成功后自动登录，返回 token）
     */
    async register(registerData: {
        registerType: 'username' | 'phone' | 'email'
        username?: string
        phone?: string
        email?: string
        password: string
        confirmPassword: string
        smsCode?: string
        emailCode?: string
        smsSessionId?: string
        emailSessionId?: string
        studentId?: string
    }): Promise<ResultDomain<LoginDomain>> {
        const response = await api.post<LoginDomain>(`${this.baseUrl}/register`, registerData)
        return response.data
    },
    
    /**
     * 健康检查
     * @returns 健康状态
     */
    async health(): Promise<ResultDomain<string>> {
        const response = await api.get<string>(`${this.baseUrl}/health`)
        return response.data
    }
}
