import { ref, computed } from 'vue'
import api from '@/utils/api.js'
import useTeamStore from '@/store/team.js'

/**
 * 群聊头像管理hook - 为消息列表中的每个群聊获取成员头像
 * 用于在消息列表中显示群聊的group-avatar组件
 */
export default function useGroupAvatars() {
  const groupAvatarMap = ref({}) // { groupID: [avatarUrl1, avatarUrl2, ...] }
  const teamStore = useTeamStore()
  const patientDefaultAvatar = '/static/default-patient-avatar.png'
  const teamMemberDefaultAvatar = '/static/default-avatar.png'

  /**
   * 获取单个群聊的头像列表
   * @param {string} groupID 群组ID
   * @param {string} teamId 团队ID
   * @param {string} patientId 患者ID
   * @returns {Promise<Array>} 头像URL数组（仅包含团队成员头像，不包含患者头像）
   */
  async function getGroupAvatarList(groupID, teamId, patientId) {
    try {
      if (!teamId) {
        console.warn(`群聊 ${groupID} 没有 teamId，无法获取头像`)
        return []
      }
      // 获取团队成员的头像和名称
      const memberMap = await teamStore.getTeamMemberAvatarsAndName(teamId)

      if (!memberMap || Object.keys(memberMap).length === 0) {
        console.warn(`群聊 ${groupID} 的团队成员为空`)
        return []
      }

      // 提取头像列表（过滤掉空头像，使用默认头像替代）
      const avatarList = Object.values(memberMap)
        .map(member => {
          // 如果成员有头像且不为空，使用成员头像；否则使用团队成员默认头像
          return (member.avatar && member.avatar.trim() !== '')
            ? member.avatar
            : teamMemberDefaultAvatar
        })

      console.log(`群聊 ${groupID} 的头像列表已加载，共 ${avatarList.length} 个团队成员头像`)
      return avatarList
    } catch (error) {
      console.error(`获取群聊 ${groupID} 的头像列表失败:`, error)
      return []
    }
  }

  /**
   * 批量获取多个群聊的头像列表
   * @param {Array} conversationList 会话列表
   * @returns {Promise<void>}
   */
  async function loadGroupAvatars(conversationList) {
    if (!conversationList || conversationList.length === 0) {
      return
    }

    try {
      // 并发加载所有群聊的头像
      const promises = conversationList.map(async (conversation) => {
        const avatarList = await getGroupAvatarList(
          conversation.groupID,
          conversation.teamId,
          conversation.patientId
        )
        groupAvatarMap.value[conversation.groupID] = avatarList
      })

      await Promise.all(promises)
      console.log('所有群聊头像加载完成')
    } catch (error) {
      console.error('批量加载群聊头像失败:', error)
    }
  }

  /**
   * 获取指定群聊的头像列表
   * @param {string} groupID 群组ID
   * @returns {Array} 头像URL数组（仅包含团队成员头像）
   */
  function getAvatarList(groupID) {
    return groupAvatarMap.value[groupID] || []
  }

  /**
   * 清空缓存
   */
  function clearCache() {
    groupAvatarMap.value = {}
  }

  return {
    groupAvatarMap,
    getGroupAvatarList,
    loadGroupAvatars,
    getAvatarList,
    clearCache
  }
}
