/**
 * 操作日志工具
 * 所有操作必须有操作日志
 */
import { addOperationLog } from './outpatientNumber'

/**
 * 记录操作日志
 * @param {Object} params
 * @param {string} params.operation - 操作类型（新增/修改/删除/查询）
 * @param {string} params.details - 操作详情
 * @param {boolean} params.success - 操作是否成功
 * @param {string} params.errorMessage - 错误信息
 * @param {Object} params.userInfo - 用户信息
 */
export async function logOperation({ operation, details, success, errorMessage, userInfo }) {
  try {
    const logData = {
      operation,
      details,
      success,
      errorMessage: errorMessage || null,
      timestamp: new Date().toISOString(),
      userId: userInfo?.id || null,
      userName: userInfo?.name || null,
    }
    
    // 控制台输出（便于调试）
    console.log('[门诊号码管理] 操作日志:', logData)
    
    // 调用后端接口记录日志（如果接口不存在，静默失败，不会抛出异常）
    await addOperationLog(logData)
  } catch (error) {
    console.error('[门诊号码管理] 记录日志失败:', error)
  }
}

/**
 * 记录查询操作
 */
export function logQuery(recordCount, userInfo) {
  return logOperation({
    operation: '查询',
    details: `查询门诊号码段列表，共 ${recordCount} 条记录`,
    success: true,
    userInfo
  })
}

/**
 * 记录新增操作
 */
export function logCreate(record, success, errorMessage, userInfo) {
  const details = success
    ? `新增门诊号码段：${record.startNo} - ${record.endNo}（操作员：${record.operatorName}）`
    : `尝试新增门诊号码段：${record.startNo} - ${record.endNo}，失败原因：${errorMessage}`
  
  return logOperation({
    operation: '新增',
    details,
    success,
    errorMessage,
    userInfo
  })
}

/**
 * 记录修改操作
 */
export function logUpdate(record, success, errorMessage, userInfo) {
  const details = success
    ? `修改门诊号码段：${record.startNo} - ${record.endNo}（ID：${record.id}）`
    : `尝试修改门诊号码段 ID：${record.id}，失败原因：${errorMessage}`
  
  return logOperation({
    operation: '修改',
    details,
    success,
    errorMessage,
    userInfo
  })
}

/**
 * 记录删除操作
 */
export function logDelete(records, success, errorMessage, userInfo) {
  const recordsInfo = records.map(r => `${r.startNo}-${r.endNo}`).join('、')
  const details = success
    ? `删除门诊号码段（共 ${records.length} 条）：${recordsInfo}`
    : `尝试删除门诊号码段（共 ${records.length} 条），失败原因：${errorMessage}`
  
  return logOperation({
    operation: '删除',
    details,
    success,
    errorMessage,
    userInfo
  })
}

