import { request } from './request';

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

export interface LoginResult {
  accessToken: string;
  refreshToken: string;
  userId: number;
  expiresTime: number;
}

export interface UserProfile {
  id: number;
  username: string;
  nickname: string;
  avatar?: string;
  dept?: {
    name?: string;
  };
}

export interface AuthMenu {
  id: number;
  parentId: number;
  name: string;
  path: string;
  component: string | null;
  componentName: string | null;
  icon: string | null;
  visible: boolean;
  keepAlive: boolean;
  alwaysShow: boolean;
  children: AuthMenu[] | null;
}

export interface AuthPermissionInfo {
  user: UserProfile;
  roles: string[];
  permissions: string[];
  menus: AuthMenu[];
}

export interface EnabledMenu {
  id: number;
  name: string;
  parentId: number;
  type: number;
}

function authHeader(accessToken: string) {
  return { Authorization: `Bearer ${accessToken}` };
}

export function loginApi(data: LoginParams) {
  return request<LoginResult>('/system/auth/login', {
    method: 'POST',
    data,
  });
}

export function getUserProfileApi(accessToken: string) {
  return request<UserProfile>('/system/user/profile/get', {
    header: authHeader(accessToken),
  });
}

export function getAuthPermissionInfoApi(accessToken: string) {
  return request<AuthPermissionInfo>('/system/auth/get-permission-info', {
    header: authHeader(accessToken),
  });
}

export function getEnabledMenuListApi(accessToken: string) {
  return request<EnabledMenu[]>('/system/menu/simple-list', {
    header: authHeader(accessToken),
  });
}

export function logoutApi(accessToken: string) {
  return request<boolean>('/system/auth/logout', {
    method: 'POST',
    data: {},
    header: authHeader(accessToken),
  });
}
