<template>
    <view
      class="uv-text"
      :class="[]"
      v-if="show"
      :style="{
        margin: margin,
				justifyContent: align === 'left' ? 'flex-start' : align === 'center' ? 'center' : 'flex-end'
      }"
      @tap="clickHandler"
    >
      <text
        :class="['uv-text__price', type && `uv-text__value--${type}`]"
        v-if="mode === 'price'"
        :style="[valueStyle]"
        >￥</text
      >
      <view class="uv-text__prefix-icon" v-if="prefixIcon">
        <uv-icon
          :name="prefixIcon"
          :customStyle="$uv.addStyle(iconStyle)"
        ></uv-icon>
      </view>
      <uv-link
        v-if="mode === 'link'"
        :text="value"
        :href="href"
        underLine
      ></uv-link>
      <template v-else-if="openType && isMp">
        <button
          class="uv-reset-button uv-text__value"
          :style="[valueStyle]"
          :openType="openType"
          @getuserinfo="onGetUserInfo"
          @contact="onContact"
          @getphonenumber="onGetPhoneNumber"
          @error="onError"
          @launchapp="onLaunchApp"
          @opensetting="onOpenSetting"
          :lang="lang"
          :session-from="sessionFrom"
          :send-message-title="sendMessageTitle"
          :send-message-path="sendMessagePath"
          :send-message-img="sendMessageImg"
          :show-message-card="showMessageCard"
          :app-parameter="appParameter"
        >
          {{ value }}
        </button>
      </template>
      <text
        v-else
        class="uv-text__value"
        :style="[valueStyle]"
        :class="[
          type && `uv-text__value--${type}`,
          lines && `uv-line-${lines}`
        ]"
        >{{ value }}</text
      >
      <view class="uv-text__suffix-icon" v-if="suffixIcon">
        <uv-icon
          :name="suffixIcon"
          :customStyle="$uv.addStyle(iconStyle)"
        ></uv-icon>
      </view>
    </view>
</template>
<script>
	import value from './value.js'
	import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js'
	import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js'
	import button from '@/uni_modules/uv-ui-tools/libs/mixin/button.js'
	import openType from '@/uni_modules/uv-ui-tools/libs/mixin/openType.js'
	import props from './props.js'
	/**
	 * Text 文本
	 * @description 此組件集成了文本類在項目中的常用功能，包括狀態，撥打電話，格式化日期，*替換，超鏈接...等功能。 您大可不必在使用特殊文本時自己定義，text組件幾乎涵蓋您能使用的大部分場景。
	 * @tutorial https://www.uvui.cn/components/loading.html
	 * @property {String} 					type		主題顏色
	 * @property {Boolean} 					show		是否顯示（默認 true ）
	 * @property {String | Number}			text		顯示的值
	 * @property {String}					prefixIcon	前置圖標
	 * @property {String} 					suffixIcon	後置圖標
	 * @property {String} 					mode		文本處理的匹配模式 text-普通文本，price-價格，phone-手機號，name-姓名，date-日期，link-超鏈接
	 * @property {String} 					href		mode=link下，配置的鏈接
	 * @property {String | Function} 		format		格式化規則
	 * @property {Boolean} 					call		mode=phone時，點擊文本是否撥打電話（默認 false ）
	 * @property {String} 					openType	小程序的打開方式
	 * @property {Boolean} 					bold		是否粗體，默認normal（默認 false ）
	 * @property {Boolean} 					block		是否塊狀（默認 false ）
	 * @property {String | Number} 			lines		文本顯示的行數，如果設置，超出此行數，將會顯示省略號
	 * @property {String} 					color		文本顏色（默認 '#303133' ）
	 * @property {String | Number} 			size		字體大小（默認 15 ）
	 * @property {Object | String} 			iconStyle	圖標的樣式 （默認 {fontSize: '15px'} ）
	 * @property {String} 					decoration	文字裝飾，下劃線，中劃線等，可選值 none|underline|line-through（默認 'none' ）
	 * @property {Object | String | Number}	margin		外邊距，對象、字符串，數值形式均可（默認 0 ）
	 * @property {String | Number} 			lineHeight	文本行高
	 * @property {String} 					align		文本對齊方式，可選值left|center|right（默認 'left' ）
	 * @property {String} 					wordWrap	文字換行，可選值break-word|normal|anywhere（默認 'normal' ）
	 * @event {Function} click  點擊觸發事件
	 * @example <uv-text text="我用十年青春,赴妳最後之約"></uv-text>
	 */
	export default {
		name: 'uv-text',
		emits: ['click'],
		// #ifdef MP
		mixins: [mpMixin, mixin, value, button, openType, props],
		// #endif
		// #ifndef MP
		mixins: [mpMixin, mixin, value, props],
		// #endif
		computed: {
			valueStyle() {
				const style = {
					textDecoration: this.decoration,
					fontWeight: this.bold ? 'bold' : 'normal',
					wordWrap: this.wordWrap,
					fontSize: this.$uv.addUnit(this.size)
				};
				!this.type && (style.color = this.color);
				this.isNvue && this.lines && (style.lines = this.lines);
				if(this.isNvue && this.mode != 'price' && !this.prefixIcon && !this.suffixIcon) {
					 style.flex = 1;
					 style.textAlign = this.align === 'left' ? 'flex-start' : this.align === 'center' ? 'center' : 'right';
				}
				this.lineHeight && (style.lineHeight = this.$uv.addUnit(this.lineHeight));
				!this.isNvue && this.block && (style.display = 'block');
				return this.$uv.deepMerge(style, this.$uv.addStyle(this.customStyle));
			},
			isNvue() {
				let nvue = false
				// #ifdef APP-NVUE
				nvue = true
				// #endif
				return nvue
			},
			isMp() {
				let mp = false
				// #ifdef MP
				mp = true
				// #endif
				return mp
			}
		},
		data() {
			return {}
		},
		methods: {
			clickHandler() {
				// 如果為手機號模式，撥打電話
				if (this.call && this.mode === 'phone') {
					uni.makePhoneCall({
						phoneNumber: this.text
					})
				}
				this.$emit('click')
			}
		}
	}
</script>
<style lang="scss" scoped>
	$show-lines: 1;
	$show-reset-button: 1;
	@import '@/uni_modules/uv-ui-tools/libs/css/variable.scss';
	@import '@/uni_modules/uv-ui-tools/libs/css/components.scss';
	@import '@/uni_modules/uv-ui-tools/libs/css/color.scss';
	.uv-text {
		@include flex(row);
		align-items: center;
		flex-wrap: nowrap;
		flex: 1;
		/* #ifndef APP-NVUE */
		width: 100%;
		/* #endif */
		&__price {
			font-size: 14px;
			color: $uv-content-color;
		}
		&__value {
			font-size: 14px;
			@include flex;
			color: $uv-content-color;
			flex-wrap: wrap;
			// flex: 1;
			text-overflow: ellipsis;
			align-items: center;
			&--primary {
				color: $uv-primary;
			}
			&--warning {
				color: $uv-warning;
			}
			&--success {
				color: $uv-success;
			}
			&--info {
				color: $uv-info;
			}
			&--error {
				color: $uv-error;
			}
			&--main {
				color: $uv-main-color;
			}
			&--content {
				color: $uv-content-color;
			}
			&--tips {
				color: $uv-tips-color;
			}
			&--light {
				color: $uv-light-color;
			}
		}
	}
</style>