import { ref, defineComponent, computed, watch, createVNode as _createVNode } from "vue";
import { raf } from "@vant/use";
import { createNamespace, makeArrayProp, makeNumberProp, makeStringProp, truthProp, padZero } from "../utils/index.mjs";
import { useExpose } from "../composables/use-expose.mjs";
import RollingTextItem from "./RollingTextItem.mjs";
const [name, bem] = createNamespace("rolling-text");
const rollingTextProps = {
  startNum: makeNumberProp(0),
  targetNum: Number,
  textList: makeArrayProp(),
  duration: makeNumberProp(2),
  autoStart: truthProp,
  direction: makeStringProp("down"),
  stopOrder: makeStringProp("ltr"),
  height: makeNumberProp(40)
};
const CIRCLE_NUM = 2;
var stdin_default = defineComponent({
  name,
  props: rollingTextProps,
  setup(props) {
    const isCustomType = computed(() => Array.isArray(props.textList) && props.textList.length);
    const itemLength = computed(() => {
      if (isCustomType.value) return props.textList[0].length;
      return `${Math.max(props.startNum, props.targetNum)}`.length;
    });
    const getTextArrByIdx = (idx) => {
      const result = [];
      for (let i = 0; i < props.textList.length; i++) {
        result.push(props.textList[i][idx]);
      }
      return result;
    };
    const targetNumArr = computed(() => {
      if (isCustomType.value) return new Array(itemLength.value).fill("");
      return padZero(props.targetNum, itemLength.value).split("");
    });
    const startNumArr = computed(() => padZero(props.startNum, itemLength.value).split(""));
    const getFigureArr = (i) => {
      const start2 = +startNumArr.value[i];
      const target = +targetNumArr.value[i];
      const result = [];
      for (let i2 = start2; i2 <= 9; i2++) {
        result.push(i2);
      }
      for (let i2 = 0; i2 <= CIRCLE_NUM; i2++) {
        for (let j = 0; j <= 9; j++) {
          result.push(j);
        }
      }
      for (let i2 = 0; i2 <= target; i2++) {
        result.push(i2);
      }
      return result;
    };
    const getDelay = (i, len) => {
      if (props.stopOrder === "ltr") return 0.2 * i;
      return 0.2 * (len - 1 - i);
    };
    const rolling = ref(props.autoStart);
    const start = () => {
      rolling.value = true;
    };
    const reset = () => {
      rolling.value = false;
      if (props.autoStart) {
        raf(() => start());
      }
    };
    watch(() => props.autoStart, (value) => {
      if (value) {
        start();
      }
    });
    useExpose({
      start,
      reset
    });
    return () => _createVNode("div", {
      "class": bem()
    }, [targetNumArr.value.map((_, i) => _createVNode(RollingTextItem, {
      "figureArr": isCustomType.value ? getTextArrByIdx(i) : getFigureArr(i),
      "duration": props.duration,
      "direction": props.direction,
      "isStart": rolling.value,
      "height": props.height,
      "delay": getDelay(i, itemLength.value)
    }, null))]);
  }
});
export {
  stdin_default as default,
  rollingTextProps
};