<template>
    <div class="c-tooltip">
        <div class="c-tooltip-content" @mouseover="showTips" @mouseleave="closeTips">
            <slot></slot>
        </div>
        <div class="c-tooltip-tip" :class="placement" v-if="tipsShow" :style='tipsStyle'>
            <img v-if="showIcon" src="/img/tips.png" class="tip-icons"></img>
            <p v-for="info in infos" class="info">* {{ info }}</p>
            <slot name="tip"></slot>
        </div>
    </div>
</template>

<script lang="ts" setup>
import { useStore } from "vuex";
import { reactive, onMounted, ref } from "vue";
import { useI18n } from "vue3-i18n";

const { t } = useI18n();
const { state, commit, dispatch } = useStore();
const tipsShow = ref(false);
const tipsStyle = ref({
    transform: ''
});

const prop = defineProps({
    placement: {
        type: String,
        default: ''
    },
    infos: {
        type: Array,
    },
    width: {
        type: String,
        default: '16rem'
    },
    showIcon: {
        type: Boolean,
        default: true
    },
    x: {
        type: String,
        default: null
    }
})

const showTips = (e) => {
    const x = e.pageX, y = e.pageY, maxH = window.innerHeight, maxW = window.innerWidth;
    let xt = x < 100 ? '15%' : y < maxH - 100 ? '0%' : '-40%';
    if (prop.x) {
        xt = prop.x;
    }
    const yt = y < maxH / 2 ? '100%' : '-50%';
    tipsStyle.value.transform = 'translate(' + xt + ', ' + yt + ')';
    tipsShow.value = true
}
const closeTips = () => {
    tipsShow.value = false
}

onMounted(() => { });
</script>
<style lang="scss" scoped>
.c-tooltip,
.c-tooltip-content {
    position: relative;
    width: 100%;
    cursor: pointer;
}

.c-tooltip-tip {
    bottom: -.4rem;
    position: absolute;
    transform: translate(0%, 100%);
    min-width: v-bind('width');
    border: 1px solid #fff;
    border-radius: 4px;
    padding: 1.2rem;
    background: #111111;
    // padding-top: 3.6rem;
    font-size: 0.86rem;
    font-weight: normal;
    z-index: 9999;
    box-shadow: 0 0 3px 3px rgba($color: #000000, $alpha: 1.0);

    .tip-icons {
        // position: absolute;
        margin-left: 50%;
        transform: translateX(-50%);
        display: flex;
        width: 3.2rem;
        height: 3.2rem;
        background-size: cover;
    }

    .info {
        font-weight: normal;
        margin-top: 0.4rem;
    }

}

.top {
    top: -2rem;
    transform: translate(-50%, -100%);
    bottom: initial;
}
</style>