import { dateUtil } from '/@/utils/dateUtil';

import { reactive, toRefs } from 'vue';

import { tryOnMounted, tryOnUnmounted } from '@vueuse/core';



export function useNow(immediate = true) {

  let timer: IntervalHandle;



  const state = reactive({

    year: 0,

    month: 0,

    week: '',

    day: 0,

    hour: '',

    minute: '',

    second: 0,

    meridiem: '',

  });



  const update = () => {

    const now = dateUtil();



    const h = now.format('HH');

    const m = now.format('mm');

    const s = now.get('s');



    state.year = now.get('y');

    state.month = now.get('M') + 1;

    state.week = '星期' + ['日', '一', '二', '三', '四', '五', '六'][now.day()];

    state.day = now.get('date');

    state.hour = h;

    state.minute = m;

    state.second = s;



    state.meridiem = now.format('A');

  };



  function start() {

    update();

    clearInterval(timer);

    timer = setInterval(() => update(), 1000);

  }



  function stop() {

    clearInterval(timer);

  }



  tryOnMounted(() => {

    immediate && start();

  });



  tryOnUnmounted(() => {

    stop();

  });



  return {

    ...toRefs(state),

    start,

    stop,

  };

}