import dayjs from 'dayjs';
import { locales } from '@pisell/utils';
import 'dayjs/locale/zh-cn';
import 'dayjs/locale/en';
import 'dayjs/locale/zh-tw';
import 'dayjs/locale/ja';
import 'dayjs/locale/pt';

/**
 * @title: 是否英文
 * @description: 
 * @param {any} item
 * @return {*}
 * @Author: WangHan
 * @Date: 2024-12-28 22:49
 */
export var isEn = function isEn(item) {
  var locale = (item === null || item === void 0 ? void 0 : item.locale) || 'en-US';
  var _isEn = locale === 'en-US' || locale === 'en';
  var localeTypes = {
    'en-US': 'en',
    'zh-CN': 'zh-cn',
    'zh-HK': 'zh-tw',
    'ja': 'ja',
    'pt': 'pt'
  };
  dayjs.locale(localeTypes[locale]);
  return _isEn;
};

/**
 * @title: 跨日预约时间
 * @description: 
 * @param {any} item
 * @return {*}
 * @Author: WangHan
 * @Date: 2024-12-28 22:50
 */
export var formatMultiDayDate = function formatMultiDayDate(item) {
  var _isEn = isEn(item);

  // 跨日
  var startDate = dayjs(item === null || item === void 0 ? void 0 : item.start_date);
  var endDate = dayjs(item === null || item === void 0 ? void 0 : item.end_date);
  var _format = _isEn ? 'ddd, DD/MM/YYYY' : 'YYYY-MM-DD，ddd';
  var date = "".concat(startDate.format(_format), " ~ ").concat(endDate.format(_format));
  return date;
};

/**
 * @title: 格式化服务的 开始时间-结束时间-时长, 用于展示
 * @description:
 * @param {any} item
 * @param {any} currentDate
 * @return {*}
 * @Author: zhiwei.Wang
 * @Date: 2024-04-26 14:04
 */
export var getServiceTime = function getServiceTime(item, currentDate, utils) {
  var _utils$storage, _item$format;
  if (!dayjs(currentDate).isValid()) return '';
  var locale = (item === null || item === void 0 ? void 0 : item.locale) || (utils === null || utils === void 0 || (_utils$storage = utils.storage) === null || _utils$storage === void 0 ? void 0 : _utils$storage.get('umi_locale')) || 'en-US';
  var isEn = locale === 'en-US' || locale === 'en';
  var localeTypes = {
    'en-US': 'en',
    'zh-CN': 'zh-cn',
    'zh-HK': 'zh-tw',
    'ja': 'ja',
    'pt': 'pt'
  };
  dayjs.locale(localeTypes[locale]);
  var startDate = dayjs(item === null || item === void 0 ? void 0 : item.start_date);
  var endDate = dayjs(item === null || item === void 0 ? void 0 : item.end_date);
  var diffInDays = (item === null || item === void 0 ? void 0 : item.custom_day_count) || endDate.diff(startDate, 'day');

  // 1.2时间格式， 同天显示 年月日 开始 - 结束， 不同天 年月日 开始 - 年月日 结束
  if (item !== null && item !== void 0 && item.duration_type) {
    var sameDay = startDate.isSame(endDate, 'day');
    var dateFormat = isEn ? 'DD/MM/YYYY' : 'YYYY-MM-DD';
    var timeFormat = 'HH:mm';
    var startTime = (item === null || item === void 0 ? void 0 : item.start_time) || startDate.format(timeFormat);
    var endTime = (item === null || item === void 0 ? void 0 : item.end_time) || endDate.format(timeFormat);
    var dateTime = '';
    if (sameDay) {
      if (isEn) {
        // 英文：开始时间 - 结束时间 年月日
        dateTime = "".concat(startTime, " ~ ").concat(endTime, " ").concat(startDate.format(dateFormat));
      } else {
        // 中文：年月日 开始时间 - 结束时间
        dateTime = "".concat(startDate.format(dateFormat), " ").concat(startTime, " ~ ").concat(endTime);
      }
    } else {
      // 不同天
      if (isEn) {
        // 英文：开始时间 年月日  -  结束时间 年月日
        dateTime = "".concat(startTime, " ").concat(startDate.format(dateFormat), " ~ ").concat(endTime, " ").concat(endDate.format(dateFormat));
      } else {
        // 中文：年月日 开始时间 - 年月日 结束时间
        dateTime = "".concat(startDate.format(dateFormat), " ").concat(startTime, " ~ ").concat(endDate.format(dateFormat), " ").concat(endTime);
      }
    }
    var startDateTime = "".concat(startDate.format('YYYY-MM-DD'), " ").concat(startTime);
    var endDateTime = "".concat(endDate.format('YYYY-MM-DD'), " ").concat(endTime);
    var _duration = dayjs(endDateTime).diff(dayjs(startDateTime), item === null || item === void 0 ? void 0 : item.duration_type);
    var durationText = '';
    if ((item === null || item === void 0 ? void 0 : item.duration_type) === 'minutes') {
      // 转为小时+分钟
      var hours = Math.floor(_duration / 60);
      var minutes = _duration % 60;
      durationText = locales.getText('pisell2.product.card.hour.minute')(hours, minutes);
    } else if ((item === null || item === void 0 ? void 0 : item.duration_type) === 'days') {
      durationText = locales.getText('pisell2.product.card.day')(_duration);
    } else {
      durationText = "".concat(_duration);
    }
    return "".concat(dateTime, " (").concat(durationText, ")");
  }
  var _format = isEn ? 'ddd, DD/MM/YYYY' : 'YYYY-MM-DD，ddd';

  // 是否自定义格式
  if (item !== null && item !== void 0 && item.hasOwnProperty('format') && (item === null || item === void 0 || (_item$format = item.format) === null || _item$format === void 0 ? void 0 : _item$format.length) > 0) {
    var _item$format2, _item$format3;
    _format = isEn ? item === null || item === void 0 || (_item$format2 = item.format) === null || _item$format2 === void 0 ? void 0 : _item$format2[0] : item === null || item === void 0 || (_item$format3 = item.format) === null || _item$format3 === void 0 ? void 0 : _item$format3[1];
  }

  // 是否显示时间
  if (item !== null && item !== void 0 && item.show_time) {
    startDate = dayjs(item !== null && item !== void 0 && item.start_time ? "".concat(item === null || item === void 0 ? void 0 : item.start_date, " ").concat(item === null || item === void 0 ? void 0 : item.start_time) : startDate.format('YYYY-MM-DD HH:mm'));
    endDate = dayjs(item !== null && item !== void 0 && item.end_time ? "".concat(item === null || item === void 0 ? void 0 : item.end_date, " ").concat(item === null || item === void 0 ? void 0 : item.end_time) : endDate.format('YYYY-MM-DD HH:mm'));
  }

  // 显示时长分钟
  if ((item === null || item === void 0 ? void 0 : item.duration_type) === 'minutes') {
    diffInDays = endDate.diff(startDate, 'minute');
  }
  var date = "".concat(startDate.format(_format), " ~ ").concat(endDate.format(_format));

  // 自定义文案
  var text = locales.getText('pisell2.product.card.day')(diffInDays);
  if (item !== null && item !== void 0 && item.custom_day_count) {
    text = locales.getText('pisell2.product.card.day.event')(diffInDays);
  }
  var textTypes = {
    'minutes': locales.getText('pisell2.product.card.minute')(diffInDays),
    'event': locales.getText('pisell2.product.card.day.event')(diffInDays)
  };
  text = (textTypes === null || textTypes === void 0 ? void 0 : textTypes[item === null || item === void 0 ? void 0 : item.duration_type]) || text;
  var duration = "".concat(diffInDays).concat(text);
  return "".concat(date, " (").concat(duration, ")");
};