<template>
  <div
    ref="chart"
    class="word-cloud-chart"
    :style="{ width: $attrs.width, height: $attrs.height }"
  ></div>
</template>

<script lang="ts">
import { defineComponent, onMounted, onBeforeUnmount, ref } from "vue";
import * as echarts from "echarts/core";
import { TooltipComponent, TitleComponent } from "echarts/components";
import { CanvasRenderer } from "echarts/renderers";

// Import the word cloud extension dynamically to avoid issues
// await import('echarts-wordcloud'); // Ensure this import works correctly

export default defineComponent({
  props: {
    data: {
      type: Array,
      required: true,
    },
    gridSize: {
      type: Number,
      default: 8,
    },
  },
  ssr: false,
  name: "WordCloudChart",
  setup(props) {
    console.log(props.data);
    console.log(props.gridSize);

    const chart = ref(null);
    let myChart: echarts.ECharts | null = null;

    onMounted(async () => {
      // Dynamically import the word cloud extension
      await import("echarts-wordcloud");

      // Register the necessary components
      echarts.use([TooltipComponent, TitleComponent, CanvasRenderer]);

      if (chart.value) {
        myChart = echarts.init(chart.value);

        myChart.setOption({
          tooltip: {
            show: true,
            formatter: function (params) {
              return (
                '<div style="font-weight: bold;;">' +
                params.data.name +
                '</div><div style="text-align:center;">دفعات تکرار: ' +
                params.data.value +
                " " +
                "بار" +
                "</div>"
              );
            },
            textStyle: {
              fontFamily: "sahel",
              fontSize: 14, // اندازه فونت
            },
          },
          series: [
            {
              type: "wordCloud",
              shape: "square",
              keepAspect: false,
              shrinkToFit: true,
              drawOutOfBound: false,
              left: "center",
              top: "center",
              width: "100%",
              height: "100%",
              right: null,
              bottom: null,
              sizeRange: [12, 60],
              rotationRange: [-90, 90],
              rotationStep: 45,
              layoutAnimation: true,
              gridSize: props.gridSize ? props.gridSize : 25,
              // animationDurationUpdate: 1000, // مدت زمان انیمیشن به میلی‌ثانیه
              // animationEasingUpdate: "cubicInOut", // نوع انیمیشن
              textStyle: {
                fontFamily: "sahel",
                fontWeight: "bold",
                color: function () {
                  return (
                    "rgb(" +
                    [
                      Math.round(Math.random() * 160),
                      Math.round(Math.random() * 160),
                      Math.round(Math.random() * 160),
                    ].join(",") +
                    ")"
                  );
                },
              },
              emphasis: {
                focus: "self",
                textStyle: {
                  textShadowBlur: 10,
                  textShadowColor: "#333",
                },
              },
              data: props.data,
            },
          ],
        });
      }
    });

    onBeforeUnmount(() => {
      if (myChart) {
        myChart.dispose();
      }
    });

    return { chart };
  },
});
</script>

<style scoped>
.word-cloud-chart {
  width: 100%;
  height: 500px;
}
</style>
