import { ref, computed } from 'vue'
import { onShow, onUnload, onLoad } from '@dcloudio/uni-app'
import api from '@/utils/api.js'
import useTeamStore from '@/store/team.js'

/**
 * 简单的群聊hook
 * @param {string} groupID 群组ID
 */
export default function useGroupChat(groupID) {
  const groupInfo = ref({})
  const members = ref([])
  const teamMemberIds = ref([]) // 存储团队成员的userId列表
  const patientId = ref('') // 存储患者ID
  const teamStore = useTeamStore()

  // 群聊成员映射
  const chatMember = computed(() => {
    const res = {}
    members.value.forEach(member => {
      res[member.id] = {
        name: member.name,
        avatar: member.avatar,
        isTeamMember: member.isTeamMember // 标记是否为团队成员
      }
      // 如果成员有 miniAppId（患者的聊天 userID），也添加一个映射（用于消息的 from 字段）
      if (member.miniAppId) {
        res[member.miniAppId] = {
          name: member.name,
          avatar: member.avatar,
          isTeamMember: member.isTeamMember
        }
      }
    })
    return res
  })

  // 判断某个userId是否为团队成员
  const isTeamMember = (userId) => {
    return teamMemberIds.value.includes(userId)
  }

  // 获取用户头像（根据是否为团队成员返回不同的默认头像）
  const getUserAvatar = (userId) => {
    const member = chatMember.value[userId]
    if (!member) {
      // 如果找不到成员信息，根据是否为团队成员返回默认头像
      return isTeamMember(userId) ? '/static/home/avatar.svg' : '/static/default-patient-avatar.png'
    }

    // 如果有头像且不为空字符串，返回头像
    if (member.avatar && member.avatar.trim() !== '') {
      return member.avatar
    }

    // 否则根据是否为团队成员返回默认头像
    return member.isTeamMember ? '/static/home/avatar.svg' : '/static/default-patient-avatar.png'
  }

  // 获取群聊信息和成员头像
  async function getGroupInfo() {
    const gid = typeof groupID === 'string' ? groupID : groupID.value
    if (!gid) return

    try {
      // 1. 获取群聊基本信息
      const groupResult = await api('getGroupListByGroupId', { groupId: gid })

      if (groupResult && groupResult.success && groupResult.data) {
        groupInfo.value = {
          groupID: gid,
          name: groupResult.data.team?.name || '群聊',
          status: groupResult.data.orderStatus || 'active',
          teamId: groupResult.data.teamId
        }

        // 2. 如果有teamId，获取团队成员头像和名称
        if (groupResult.data.teamId) {
          const memberMap = await teamStore.getTeamMemberAvatarsAndName(groupResult.data.teamId)

          // 3. 存储团队成员ID列表
          teamMemberIds.value = Object.keys(memberMap)

          // 4. 构建团队成员列表（从返回的 { userId: { avatar, name } } 中提取）
          members.value = teamMemberIds.value.map(userId => {
            const memberInfo = memberMap[userId] || {}
            return {
              id: userId,
              name: memberInfo.name || userId, // 使用返回的 name，如果没有则用 userId
              avatar: memberInfo.avatar || '', // 使用返回的 avatar
              isTeamMember: true
            }
          })

          // 5. 添加患者信息（使用默认患者头像）
          if (groupResult.data.patient) {
            const pid = groupResult.data.patientId?.toString() || ''
            patientId.value = pid
            members.value.push({
              id: pid,
              name: groupResult.data.patient.name || '患者',
              avatar: '', // 患者不设置头像，使用默认
              isTeamMember: false,
              miniAppId: groupResult.data.patient.miniAppId || '' // 患者的聊天 userID
            })
          }
        }
      }
    } catch (error) {
      console.error('获取群聊信息失败:', error)
    }
  }

  onShow(() => {
    getGroupInfo()
  })


  onUnload(() => {
    // 清理资源
  })

  return {
    groupInfo,
    members,
    chatMember,
    getGroupInfo,
    isTeamMember,
    getUserAvatar
  }
}
