<script lang="ts" setup>
import { textReplaceEmoji } from '@/utils/emojis'
import { textReplaceLink } from '@/utils/strings'
import { getImageInfo } from '@/utils/functions'
import { ITalkRecordExtraMixed, ITalkRecord } from '@/types/chat'

const props = defineProps<{
  extra: ITalkRecordExtraMixed
  data: ITalkRecord
  maxWidth?: Boolean
}>()

const float = props.data.float

const img = (src: string, width = 200) => {
  const info = getImageInfo(src)

  if (info.width == 0 || info.height == 0) {
    return {
      width: 200,
      height: 200
    }
  }

  if (info.width < width) {
    return {
      width: info.width,
      height: info.height
    }
  }

  return {
    width: width,
    height: info.height / (info.width / width)
  }
}
</script>

<template>
  <div
    class="im-message-mixed"
    :class="{
      left: float == 'left',
      right: float == 'right',
      maxwidth: maxWidth
    }"
  >
    <pre>
      <template v-for="(item) in extra.items" :key="item.id">

        <template v-if="item.type === 1">
               <span v-html="textReplaceEmoji(textReplaceLink(item.content))" />
        </template>

        <template v-else-if="item.type === 3">
          <div
            style="display: flex; margin: 5px 0;border-radius: 8px;overflow: hidden;"
          >
            <tm-image :src="item.content" :width="img(item.content,450).width" :height="img(item.content,450).height" ></tm-image>
          </div>
        </template>
      </template>
    </pre>
  </div>
</template>

<style lang="less" scoped>
.im-message-mixed {
  min-width: 40rpx;
  min-height: 40rpx;
  padding: 20rpx 18rpx;
  color: #000000;
  background-color: #FFFFFF;
  border-radius: 0 16rpx 16rpx 16rpx;

  &.right {
    background-color: #46299D;
    color: #FFFFFF;
    border-radius: 10px 0px 10px 10px;
  }

  &.maxwidth {
    max-width: 70%;
  }

  pre {
    display: flex;
    flex-direction: column;
    white-space: pre-wrap;
    overflow: hidden;
    word-break: break-word;
    word-wrap: break-word;
    font-size: 14px;
    padding: 3px 5px;
    font-family: 'PingFang SC', 'Microsoft YaHei', 'Alibaba PuHuiTi 2.0 45';
    line-height: 25px;

    :deep(a) {
      color: #2196f3;
      text-decoration: revert;
    }
  }
}
</style>
