import { ApiError, request } from '@/api/request';
import type {
  LoginParams,
  LoginResult,
  TenantLoginData,
  UserInfo,
} from '@/types/auth';

interface TenantLoginRequest {
  phone: string;
  password: string;
  tenantCode: string;
}

const toUserInfo = (data: TenantLoginData, params: LoginParams): UserInfo => {
  const phone = data.phone ?? params.phone.trim();
  const loginType = data.loginType?.toLowerCase() ?? '';

  return {
    id: data.employeeId ?? 0,
    username: phone,
    nickname: data.employeeName ?? phone,
    role: loginType.includes('admin') ? 'admin' : 'user',
    tenant: data.tenantCode ?? params.tenant.trim(),
    phone,
  };
};

/** 租户登录。 */
export const loginApi = async (params: LoginParams): Promise<LoginResult> => {
  const data = await request<TenantLoginRequest, TenantLoginData>(
    {
      url: '/auth/tenant-login',
      method: 'POST',
      data: {
        phone: params.phone.trim(),
        password: params.password,
        tenantCode: params.tenant.trim(),
      },
    },
    {
      // 登录有副作用，不合并；错误由登录页统一提示。
      merge: false,
      showError: false,
    },
  );

  if (!data?.token) {
    throw new ApiError('登录响应中未找到 token', { data });
  }

  return {
    token: data.token,
    user: toUserInfo(data, params),
  };
};
