import { PERMISSION } from '@/constants/permissions';
import type { LoginParams, LoginResult, UserInfo } from '@/types/auth';

interface MockAccount {
  password: string;
  user: UserInfo;
}

/**
 * 演示环境下的本地账号。
 * 真实项目请替换为后端登录接口，并由后端进行权限校验。
 */
const MOCK_ACCOUNTS: Record<string, MockAccount> = {
  admin: {
    password: 'admin123',
    user: {
      id: 1,
      username: 'admin',
      nickname: '超级管理员',
      role: 'admin',
      permissions: ['*'],
    },
  },
  user: {
    password: 'user123',
    user: {
      id: 2,
      username: 'user',
      nickname: '普通运营',
      role: 'user',
      permissions: [
        PERMISSION.DASHBOARD_VIEW,
        PERMISSION.USER_VIEW,
        PERMISSION.ORDER_VIEW,
        PERMISSION.CUSTOMER_VIEW,
      ],
    },
  },
};

const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));

export async function loginApi(params: LoginParams): Promise<LoginResult> {
  await delay(500);

  const account = MOCK_ACCOUNTS[params.username];
  if (!account || account.password !== params.password) {
    throw new Error('用户名或密码错误');
  }

  return {
    token: `mock-token-${account.user.id}-${Date.now()}`,
    user: account.user,
  };
}
