import { ElSkeletonItem } from "element-plus";

/**
 * @param {date} time 需要转换的时间
 * @param {String} fmt 需要转换的格式 如 yyyy-MM-dd、yyyy-MM-dd HH:mm:ss
 * @returns {String}
 */
export const formatTime = (time: string | Date, fmt: string): string => {
  if (!time) return "";
  const date = new Date(time);
  const o = {
    "M+": date.getMonth() + 1,
    "d+": date.getDate(),
    "H+": date.getHours(),
    "m+": date.getMinutes(),
    "s+": date.getSeconds(),
    "q+": Math.floor((date.getMonth() + 3) / 3),
    S: date.getMilliseconds(),
  };
  if (/(y+)/.test(fmt))
    fmt = fmt.replace(
      RegExp.$1,
      (date.getFullYear() + "").substr(4 - RegExp.$1.length)
    );
  for (const k in o) {
    if (new RegExp("(" + k + ")").test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        // @ts-ignore: Unreachable code error
        RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
      );
    }
  }
  return fmt;
};

export const speak = (content: any, onComplete: Function = () => {}) => {
  // 检查浏览器是否支持语音合成
  if (!window.speechSynthesis) {
    console.warn("当前浏览器不支持语音合成功能");
    return;
  }

  const utterance = new SpeechSynthesisUtterance(content);
  utterance.lang = "zh-CN";
  utterance.rate = 1;
  utterance.rate = 1.5;

  // 设置结束回调（通过参数传递）
  utterance.onend = () => {
    onComplete();
  };

  // 播放语音
  window.speechSynthesis.speak(utterance);
};
// 关闭语音播报
export const stopSpeak = () => {
  (document.getElementById("audioId") as HTMLAudioElement)?.pause();
  window.speechSynthesis.cancel();
};
/**
 * 获取时间范围
 * @param {number} option - 1表示本周，3表示本月
 * @returns {{start: Date, end: Date}} - 包含开始时间和结束时间的对象
 */
export const getDateRange = (option: number) => {
  console.log("🚀 ~ getDateRange ~ option:", option);
  const now = new Date();
  if (option === 1) {
    //年
    const firstDay = new Date(now.getFullYear(), 0, 1);

    const lastDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());

    return formatDate(firstDay) + " 至 " + formatDate(lastDay);
  }
  ElSkeletonItem;
  if (option === 3) {
    // 获取本月日期范围
    // 本月第一天
    const firstDay = new Date(now.getFullYear(), now.getMonth(), 1);

    // 本月最后一天
    const lastDay = new Date(now.getFullYear(), now.getMonth() + 1, 0);

    return formatDate(firstDay) + " 至 " + formatDate(lastDay);
  } else if (option === 4) {
    // 获取本周日期范围
    // 计算周一的日期
    const monday = new Date(now);
    monday.setDate(now.getDate() - now.getDay() + 1);

    // 计算周日的日期
    const sunday = new Date(now);
    sunday.setDate(now.getDate() - now.getDay() + 7);

    return formatDate(monday) + " 至 " + formatDate(sunday);
  } else if (option === 6) {
    // 获取本月日期范围
    // 本月第一天
    return formatDate(now);
  }
};
/**
 * 格式化日期为YYYY-MM-DD格式
 * @param {Date} date - 要格式化的日期对象
 * @returns {string} - 格式化后的日期字符串
 */
function formatDate(date: Date) {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, "0");
  const day = String(date.getDate()).padStart(2, "0");
  return `${year}-${month}-${day}`;
}
