/** 同步结果分类 — 从组件中提取以便测试。 */

export interface SyncResultInput {
  scheduleCount: number;
  syncedItems: number;
  skippedNoMapping: number;
  failedBatchCount: number;
  failedItems: number;
  errors: string[];
}

export interface SyncResultClassification {
  /** 是否有任何失败 */
  hasFailure: boolean;
  /** 通知级别：'success' | 'warning' | 'error' */
  level: 'success' | 'warning' | 'error';
  /** 适合展示给用户的消息文本 */
  message: string;
}

/**
 * 将同步结果分类为成功/部分失败/全部失败。
 * - (failedBatchCount > 0 || errors 非空) 且 syncedItems > 0 → warning（部分失败）
 * - (failedBatchCount > 0 || errors 非空) 且 syncedItems === 0 → error（全部失败）
 * - 否则 → success
 */
export function classifySyncResult(result: SyncResultInput): SyncResultClassification {
  const hasFailure = result.failedBatchCount > 0 || result.errors.length > 0;

  if (!hasFailure) {
    return {
      hasFailure: false,
      level: 'success',
      message: `同步完成：${result.syncedItems} 条排班已写入钉钉`,
    };
  }

  if (result.syncedItems > 0) {
    return {
      hasFailure: true,
      level: 'warning',
      message: `同步部分失败：${result.syncedItems} 条成功，${result.failedItems} 条失败`,
    };
  }

  return {
    hasFailure: true,
    level: 'error',
    message: `同步失败：${result.failedItems} 条全部写入失败`,
  };
}

/**
 * 从错误列表中提取摘要（最多 5 条）。
 */
export function errorSummary(errors: string[]): string[] {
  return errors.slice(0, 5);
}
