<template>
  <Text underline color="text.link" touchable v-bind="$attrs" @click="onClick">
    <slot />
  </Text>
</template>

<script setup lang="ts">
import Text, { type TextProps } from '../basic/Text.vue';

export interface AProps extends TextProps {
  /**
   * 链接地址
   */
  href?: string;
  /**
   * 链接类型
   * auto 表示自动判断，根据 href 是否以 / 开头判断是否为 uni-app 页面，以 http 或 https 开头判断为外部链接。
   * uni-page 表示跳转 uni-app 页面（uni.navigateTo 打开）
   * url 表示跳转外部链接，h5 环境下会使用 window.open 打开，app 会调用 plus 打开浏览器，小程序不支持。
   * @default 'uni-page'
   */
  linkType?: 'auto' | "uni-page" | "url" | "custom" | "back";
}

const props = withDefaults(defineProps<AProps>(), {
  linkType: "auto",
});
const emit = defineEmits([ "click"	])

function onClick(e: any) {
  if (props.linkType === "back") {
    uni.navigateBack()
    return;
  }
  if (props.href) {

    let linkType = props.linkType;
    if (props.linkType === "auto") {
      if (props.href.startsWith("/")) {
        linkType = "uni-page";
      } else if (props.href.startsWith("http") || props.href.startsWith("https")) {
        linkType = "url";
      } else {
        linkType = "custom";
      }
    }

    if (linkType === "url") {
      // #ifdef APP-PLUS
      plus.runtime.openURL(props.href)
      // #endif
      // #ifdef H5
      window.open(props.href)
      // #endif
      // #ifdef MP
      uni.setClipboardData({
        data: props.href,
      })
      uni.showToast({
        title: "链接已复制到剪贴板，可在系统浏览器中打开页面",
        icon: "none",
      })
      // #endif
      return;
    }
    if (linkType === "uni-page") {
      uni.navigateTo({ url: props.href })
      return;
    }
  }
  emit("click", e)
}
</script>