import { useCallback } from 'react';

interface ErrorOptions {
  /** 用户可见的错误提示 */
  userMessage?: string;
  /** 是否显示 alert（默认 true） */
  showAlert?: boolean;
  /** 额外的上下文信息 */
  context?: Record<string, unknown>;
}

/**
 * 统一错误处理 Hook
 * 
 * 替代散落在各处的 console.error + alert 模式，提供：
 * - 统一的日志格式（带时间戳和上下文）
 * - 可选的用户提示
 * - 错误上报扩展点
 * 
 * @example
 * ```tsx
 * const handleError = useErrorHandler();
 * 
 * try {
 *   await supabase.from('plans').insert(data);
 * } catch (err) {
 *   handleError(err, { userMessage: '保存计划失败，请重试' });
 * }
 * ```
 */
export function useErrorHandler() {
  const handleError = useCallback((error: unknown, options: ErrorOptions = {}) => {
    const { userMessage, showAlert = true, context } = options;

    // 结构化日志
    const logEntry = {
      timestamp: new Date().toISOString(),
      error: error instanceof Error ? { message: error.message, stack: error.stack } : String(error),
      context,
    };
    console.error('[AppError]', logEntry);

    // 用户提示
    if (showAlert && userMessage) {
      alert(userMessage);
    } else if (showAlert && error instanceof Error) {
      alert(error.message || '操作失败，请重试');
    }
  }, []);

  return handleError;
}
