export type AiPublishStatus =
  | 'DELETE_PENDING'
  | 'DRAFT'
  | 'OFFLINE'
  | 'OFFLINE_PENDING'
  | 'PUBLISHED'
  | 'PUBLISH_PENDING';

/**
 * 规范化发布状态，避免页面散落默认值判断。
 */
export function normalizeAiPublishStatus(
  value?: null | string,
): AiPublishStatus {
  switch (value) {
    case 'PUBLISHED':
    case 'PUBLISH_PENDING':
    case 'OFFLINE':
    case 'OFFLINE_PENDING':
    case 'DELETE_PENDING':
      return value;
    default:
      return 'DRAFT';
  }
}

/**
 * 解析用于页面展示的发布状态。
 * 已发布资源若存在当前审批实例，则视为“发布审批中”，用于统一状态文案与动作禁用。
 */
export function resolveAiResourceDisplayStatus(
  displayValue?: null | string,
  _fallbackValue?: null | string,
): AiPublishStatus {
  return normalizeAiPublishStatus(displayValue);
}

/**
 * 当前资源是否已有正式线上版本。
 */
export function isAiResourcePublished(value?: null | string) {
  return normalizeAiPublishStatus(value) === 'PUBLISHED';
}

/**
 * 当前资源是否处于已下线状态。
 */
export function isAiResourceOffline(value?: null | string) {
  return normalizeAiPublishStatus(value) === 'OFFLINE';
}

/**
 * 当前资源是否允许对外可见。
 */
export function isAiResourceExternallyVisible(value?: null | string) {
  const normalized = normalizeAiPublishStatus(value);
  return (
    normalized === 'PUBLISHED' ||
    normalized === 'DELETE_PENDING' ||
    normalized === 'OFFLINE_PENDING'
  );
}

/**
 * 当前资源是否允许作为新的 Bot 引用候选。
 */
export function isAiResourceSelectableForBot(value?: null | string) {
  return normalizeAiPublishStatus(value) === 'PUBLISHED';
}

/**
 * 当前资源是否处于审批处理中。
 */
export function isAiResourceApprovalPending(
  displayValue?: null | string,
  _fallbackValue?: null | string,
) {
  const normalized = resolveAiResourceDisplayStatus(displayValue);
  return (
    normalized === 'PUBLISH_PENDING' ||
    normalized === 'OFFLINE_PENDING' ||
    normalized === 'DELETE_PENDING'
  );
}

/**
 * 当前资源是否允许发起发布。
 */
export function canAiResourcePublish(
  displayValue?: null | string,
  _fallbackValue?: null | string,
) {
  if (isAiResourceApprovalPending(displayValue)) {
    return false;
  }
  const normalized = resolveAiResourceDisplayStatus(displayValue);
  return normalized === 'DRAFT' || normalized === 'OFFLINE';
}

/**
 * 当前资源是否允许重新发布。
 */
export function canAiResourceRepublish(
  displayValue?: null | string,
  _fallbackValue?: null | string,
) {
  if (isAiResourceApprovalPending(displayValue)) {
    return false;
  }
  return resolveAiResourceDisplayStatus(displayValue) === 'PUBLISHED';
}

/**
 * 当前资源是否允许发起下线。
 */
export function canAiResourceOffline(
  displayValue?: null | string,
  _fallbackValue?: null | string,
) {
  if (isAiResourceApprovalPending(displayValue)) {
    return false;
  }
  return resolveAiResourceDisplayStatus(displayValue) === 'PUBLISHED';
}

/**
 * 当前资源是否允许发起删除。
 */
export function canAiResourceDelete(
  displayValue?: null | string,
  _fallbackValue?: null | string,
) {
  if (isAiResourceApprovalPending(displayValue)) {
    return false;
  }
  const normalized = resolveAiResourceDisplayStatus(displayValue);
  return normalized === 'DRAFT' || normalized === 'OFFLINE';
}
