// 认证和权限相关API
import axios from 'axios'
import { triggerLoginStatusChange } from '../utils/eventBus.js'
import { message } from 'ant-design-vue'

// 根据环境设置基础URL
const API_BASE_URL = '/api'

let isRedirecting = false

export const handleAuthError = () => {
  if (isRedirecting) return
  isRedirecting = true

  localStorage.removeItem('token')
  localStorage.removeItem('refreshToken')
  localStorage.removeItem('userInfo')
  localStorage.removeItem('isLoggedIn')

  triggerLoginStatusChange()

  message.warning('登录已过期，请重新登录')

  setTimeout(() => {
    window.location.reload()
  }, 1000)
}

export const resetRedirectFlag = () => {
  isRedirecting = false
}

// 创建axios实例
const apiClient = axios.create({
  baseURL: API_BASE_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器，添加token
apiClient.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器，处理未授权错误和错误信息
apiClient.interceptors.response.use(
  response => {
    return response
  },
  error => {
    const status = error.response?.status
    
    // 处理限流错误
    if (error.response?.data?.message && 
        (error.response.data.message.includes('请求过于频繁') || 
         error.response.data.message.includes('too many requests') ||
         error.response.data.message.includes('rate limit'))) {
      console.warn('⚠️ API请求触发限流:', error.response.data.message)
      error.isRateLimitError = true
      error.message = '请求过于频繁，请稍后再试'
      return Promise.reject(error)
    }

    if (status === 401 || status === 403) {
      handleAuthError()
      return Promise.reject(error)
    }

    if (error.response && error.response.data) {
      error.message = error.response.data.message || error.message
    }

    return Promise.reject(error)
  }
)

// 认证相关API（路径不含 /api 前缀，因为 baseURL 已经是 /api）
export const authAPI = {
  // 用户登录
  login: (username, password) => {
    return apiClient.post('/auth/login', { username, password })
  },
  
  // 用户登出
  logout: () => {
    return apiClient.post('/auth/logout')
  },
  
  // 获取当前用户信息
  getUserInfo: () => {
    return apiClient.get('/auth/user/info')
  },
  
  // 获取当前用户角色列表
  getUserRoles: () => {
    return apiClient.get('/auth/user/roles')
  },
  
  // 获取当前用户主要角色
  getMainRole: () => {
    return apiClient.get('/auth/user/main-role')
  }
}

// 用户管理API（路径不含 /api 前缀，因为 baseURL 已经是 /api）
// 注意：后端 UserController 使用的是 /user（单数）
export const userAPI = {
  // 分页查询用户列表
  getUsers: (params = {}) => {
    return apiClient.get('/user/page', { params })
  },
  
  // 创建用户
  createUser: (userData) => {
    return apiClient.post('/user', userData)
  },
  
  // 更新用户
  updateUser: (userId, userData) => {
    return apiClient.put('/user', {
      ...userData,
      id: userId
    })
  },
  
  // 删除用户
  deleteUser: (userId) => {
    return apiClient.delete(`/user/${userId}`)
  },
  
  // 分配用户角色
  assignRoles: (userId, roleIds) => {
    return apiClient.put(`/user/${userId}/roles`, roleIds)
  },
  
  // 获取用户详情
  getUserById: (userId) => {
    return apiClient.get(`/user/${userId}`)
  },
  
  // 批量获取用户信息
  getUsersByIds: (userIds) => {
    const ids = userIds.join(',')
    return apiClient.get('/user/batch', { params: { ids } })
  },
  
  // 获取用户权限列表
  getUserPermissions: (userId) => {
    return apiClient.get(`/user/${userId}/permissions`)
  }
}

// 权限管理API
export const permissionAPI = {
  // 获取所有权限列表
  getAllPermissions: () => {
    return apiClient.get('/permissions')
  }
}

// 角色管理API（路径不含 /api 前缀，因为 baseURL 已经是 /api）
// 注意：后端 RoleController 使用的是 /role（单数）
export const roleAPI = {
  // 获取所有角色列表
  getRoles: () => {
    return apiClient.get('/role')
  },
  
  // 创建角色
  createRole: (roleData) => {
    return apiClient.post('/role', roleData)
  },
  
  // 更新角色
  updateRole: (roleId, roleData) => {
    return apiClient.put(`/role/${roleId}`, roleData)
  },
  
  // 删除角色
  deleteRole: (roleId) => {
    return apiClient.delete(`/role/${roleId}`)
  },
  
  // 分配角色权限
  assignPermissions: (roleId, permissionIds) => {
    return apiClient.put(`/role/${roleId}/permissions`, permissionIds)
  },
  
  // 获取角色权限列表
  getRolePermissions: (roleId) => {
    return apiClient.get(`/role/${roleId}/permissions`)
  }
}

// 部门管理API（路径不含 /api 前缀，因为 baseURL 已经是 /api）
// 注意：后端 DepartmentController 使用的是 /department（单数）
export const departmentAPI = {
  // 获取部门列表
  getDepartments: () => {
    return apiClient.get('/department')
  },

  // 创建部门
  createDepartment: (data) => {
    return apiClient.post('/department', data)
  },

  // 更新部门
  updateDepartment: (id, data) => {
    return apiClient.put(`/department/${id}`, data)
  },

  // 删除部门
  deleteDepartment: (id) => {
    return apiClient.delete(`/department/${id}`)
  },

  // 设置部门管理员
  setManager: (id, managerId) => {
    return apiClient.put(`/department/${id}/manager`, null, { params: { managerId } })
  },

  // 查询部门用户
  getDepartmentUsers: (id) => {
    return apiClient.get(`/department/${id}/users`)
  }
}

export const companyAPI = {
  getCompanies: () => {
    return apiClient.get('/company')
  },
  createCompany: (data) => {
    return apiClient.post('/company', data)
  },
  updateCompany: (id, data) => {
    return apiClient.put(`/company/${id}`, data)
  },
  deleteCompany: (id) => {
    return apiClient.delete(`/company/${id}`)
  }
}

export default {
  authAPI,
  userAPI,
  roleAPI,
  permissionAPI,
  departmentAPI,
  companyAPI,
  handleAuthError,
  resetRedirectFlag
}
