/**
 * 计算当前步骤的进度百分比
 * 
 * @param current - 当前步骤索引
 * @param total - 总步骤数
 * @returns 进度百分比（0-100）
 */
export function calculateProgress(current, total) {
  if (total <= 0) return 0;
  if (current < 0) return 0;
  if (current >= total) return 100;
  return Math.round((current + 1) / total * 100);
}

/**
 * 判断步骤是否可点击
 * 
 * @param index - 步骤索引
 * @param current - 当前步骤索引
 * @param status - 步骤状态
 * @param clickable - 全局是否可点击
 * @param allowClickFinished - 是否允许点击已完成步骤
 * @returns 是否可点击
 */
export function isStepClickable(index, current, status, clickable, allowClickFinished) {
  // 全局不允许点击
  if (!clickable) {
    return false;
  }

  // 当前步骤不可点击（避免重复触发）
  if (index === current) {
    return false;
  }

  // 已完成的步骤
  if (status === 'finish' || index < current) {
    return allowClickFinished;
  }

  // 等待中的步骤默认不可点击
  if (status === 'wait') {
    return false;
  }

  // 错误状态的步骤可以点击（用于修正）
  if (status === 'error') {
    return true;
  }
  return true;
}

/**
 * 获取步骤状态
 * 
 * @param index - 步骤索引
 * @param current - 当前步骤索引
 * @param customStatus - 自定义状态（优先级最高）
 * @returns 步骤状态
 */
export function getStepStatus(index, current, customStatus) {
  // 如果有自定义状态，直接返回
  if (customStatus) {
    return customStatus;
  }

  // 根据索引和当前步骤判断状态
  if (index < current) {
    return 'finish';
  } else if (index === current) {
    return 'process';
  } else {
    return 'wait';
  }
}

/**
 * 合并步骤类名
 * 
 * @param baseClass - 基础类名
 * @param status - 步骤状态
 * @param customClass - 自定义类名
 * @returns 合并后的类名
 */
export function mergeStepClassName(baseClass, status, customClass) {
  var classes = [baseClass];

  // 添加状态类名
  classes.push("".concat(baseClass, "-").concat(status));

  // 添加自定义类名
  if (customClass) {
    classes.push(customClass);
  }
  return classes.join(' ');
}

/**
 * 判断步骤变更方向
 * 
 * @param from - 原步骤索引
 * @param to - 目标步骤索引
 * @returns 变更方向
 */
export function getChangeDirection(from, to) {
  return to > from ? 'forward' : 'backward';
}

/**
 * 验证步骤索引是否有效
 * 
 * @param index - 步骤索引
 * @param total - 总步骤数
 * @returns 是否有效
 */
export function isValidStepIndex(index, total) {
  return index >= 0 && index < total;
}