import axios from 'axios'
import {encrypt, encryptWithPublicKey} from '@/utils/jsencrypt'

export interface LoginData {
  username: string;
  password: string;
}

export interface LoginRes {
  token: string;
}

export async function login(data: LoginData) {
  const formatData = {...data}
  formatData.password = await encrypt(formatData.password)
  return axios.post<LoginRes>('/login', formatData)
}

export function logout () {
  return axios.post<LoginRes>('/logout')
}

export function getUserInfo () {
  return axios.get('/system/user/profile')
}

export function updateUserInfo (payload: any) {
  return axios.put('/system/user/profile', payload)
}

export function getMenuList () {
  const locale = localStorage.getItem('locale') || 'zh-CN'
  return axios.get('/getRouters', {
    headers: {
      language: locale
    }
  })
}

export function getUserList (query: any) {
  return axios.get('/system/user/list', {
    params: query
  })
}

export function createUser (payload: any) {
  const formData = { ...payload }
  formData.password = encryptWithPublicKey(payload.password)
  return axios.post('/system/user', formData)
}

export function userDelete (userId: string) {
  return axios.delete(`/system/user/${userId}`)
}

export function changeStatus (payload: any) {
  return axios.put('/system/user/changeStatus', payload)
}

export function updateUser (payload: any) {
  return axios.put('/system/user', payload)
}

export function resetCode (payload: any) {
  const formData = { ...payload }
  formData.password = encryptWithPublicKey(payload.password)
  return axios.put('/system/user/resetPwd', formData)
}

export function updateCode (data: any) {
  const formatData = { ...data }
  formatData.newPassword = encryptWithPublicKey(formatData.newPassword)
  formatData.oldPassword = encryptWithPublicKey(formatData.oldPassword)
  return axios.put('/system/user/profile/updatePwd', formatData)
}

export function userRoleList (userId?: string) {
  return axios.get(`/system/user/${userId}`)
}