import dayjs from 'dayjs';
var SESSION_EXTENSION_TYPES = ['session_product', 'session_ticket'];

/**
 * 是否为 session 商品。
 *
 * @example
 * getIsSessionProduct({ extension_type: 'session_ticket' }); // true
 */
function getIsSessionProduct(product) {
  return SESSION_EXTENSION_TYPES.includes(product === null || product === void 0 ? void 0 : product.extension_type);
}

/**
 * 从 session 快照解析日历日 YYYY-MM-DD。
 *
 * @example
 * resolveSessionCalendarDay({ start_at: '2026-06-05 10:00:00' }); // '2026-06-05'
 */
function resolveSessionCalendarDay(session) {
  var _session$start_at;
  if (!session) return null;
  var raw = (_session$start_at = session.start_at) !== null && _session$start_at !== void 0 ? _session$start_at : session.end_at;
  if (!raw) return null;
  var parsed = dayjs(raw);
  return parsed.isValid() ? parsed.format('YYYY-MM-DD') : null;
}

/**
 * 将 booking / TimeBar 日期规范为 YYYY-MM-DD。
 *
 * @example
 * formatScheduleCalendarDay('2026-06-05 19:01:18'); // '2026-06-05'
 */
function formatScheduleCalendarDay(date) {
  if (date == null || date === '') return null;
  var parsed = dayjs(date);
  return parsed.isValid() ? parsed.format('YYYY-MM-DD') : null;
}
/**
 * 判断 session 商品 catalog 中的 session 日历日是否与当前 TimeBar / bookingDate 不一致。
 *
 * @example
 * isSessionCatalogDateStale(product, '2026-06-05 19:01:18');
 * // session 为 2026-06-04 → true；一致或无 session 快照 → false
 */
export function isSessionCatalogDateStale(product, bookingDate) {
  var _product$cartDetailVa;
  if (!getIsSessionProduct(product)) {
    return false;
  }
  var timeBarDay = formatScheduleCalendarDay(bookingDate);
  if (!timeBarDay) {
    return false;
  }
  var sessionDay = resolveSessionCalendarDay((_product$cartDetailVa = product.cartDetailValue) === null || _product$cartDetailVa === void 0 ? void 0 : _product$cartDetailVa.session);
  if (!sessionDay) {
    return false;
  }
  return sessionDay !== timeBarDay;
}

/**
 * 组装 session catalog 日期不一致时的日志 metadata。
 *
 * @example
 * buildSessionCatalogStaleInfo(product, '2026-06-05 19:01:18');
 */
export function buildSessionCatalogStaleInfo(product, bookingDate) {
  var _product$id, _ref, _product$title, _product$cartDetailVa2;
  return {
    productId: (_product$id = product === null || product === void 0 ? void 0 : product.id) !== null && _product$id !== void 0 ? _product$id : null,
    productTitle: (_ref = (_product$title = product === null || product === void 0 ? void 0 : product.title) !== null && _product$title !== void 0 ? _product$title : product === null || product === void 0 ? void 0 : product.name) !== null && _ref !== void 0 ? _ref : null,
    sessionDay: resolveSessionCalendarDay((_product$cartDetailVa2 = product.cartDetailValue) === null || _product$cartDetailVa2 === void 0 ? void 0 : _product$cartDetailVa2.session),
    timeBarDay: formatScheduleCalendarDay(bookingDate),
    bookingDate: bookingDate
  };
}