import request from '@/utils/request';
import { AxiosPromise } from 'axios';

/**
 * 查询商家入驻申请列表
 */
export const listCompanyApply = (query: any): AxiosPromise<any> => {
  return request({
    url: '/main/companyApply/list',
    method: 'get',
    params: query
  });
};

/**
 * 查询商家入驻申请详情（按ID）
 */
export const getCompanyApply = (id: string | number): AxiosPromise<any> => {
  return request({
    url: '/main/companyApply/' + id,
    method: 'get'
  });
};

/**
 * 通过会话信息查询商家入驻信息
 * 逻辑与后端 CsSessionServiceImpl.resolveFromUserAvatar 一致：
 * 先按 ID 查，查不到再按 companyName 查
 */
export const getCompanyApplyBySession = async (fromUserId: string | number, fromUserName?: string): Promise<any> => {
  try {
    // 先尝试按 ID 查询
    const res = await getCompanyApply(fromUserId);
    if (res.code === 200 && res.data) {
      return processCompanyApplyData(res.data);
    }
  } catch (e) {
    // 按 ID 查询失败，继续尝试其他方式
  }

  try {
    // 再尝试按 companyName 查询
    if (fromUserName) {
      const res = await listCompanyApply({ companyName: fromUserName });
      if (res.code === 200 && res.rows && res.rows.length > 0) {
        return processCompanyApplyData(res.rows[0]);
      }
    }
  } catch (e) {
    // 按 companyName 查询也失败
  }

  return null;
};

/**
 * 处理商家数据，将 OSS ID 转换为可访问的 URL
 * 后端已通过 ossService 将 OSS ID 转为真实 URL 返回（avatarUrl/authLetterUrl 字段）
 * 仅在后端未返回 URL 时，作为兜底用 OSS ID 拼接路径
 */
function processCompanyApplyData(data: any): any {
  if (!data) return data;
  // avatar：优先用后端返回的 avatarUrl（真实 OSS URL），否则用 OSS ID 拼接
  if (data.avatar && !data.avatarUrl) {
    const baseApi = import.meta.env.VITE_APP_BASE_API;
    data.avatarUrl = `${baseApi}/resource/oss/file/${data.avatar}`;
  }
  // authLetter：同理
  if (data.authLetter && !data.authLetterUrl) {
    const baseApi = import.meta.env.VITE_APP_BASE_API;
    data.authLetterUrl = `${baseApi}/resource/oss/file/${data.authLetter}`;
  }
  return data;
}
