// src/client/shared/api/errors.ts
// Custom error classes for API and contract validation

/**
 * Ошибка валидации контракта API
 * Выбрасывается интерсептором, когда ответ сервера не соответствует Zod-схеме
 */
export class ContractError extends Error {
  public readonly code = 'CONTRACT_VIOLATION';
  public readonly validationErrors: Record<string, string>;

  constructor(message: string, validationErrors: Record<string, string> = {}) {
    super(message);
    this.name = 'ContractError';
    this.validationErrors = validationErrors;
  }
}

/**
 * Ошибка API (наследует существующий ApiError)
 */
export class ApiError extends Error {
  public code: string;
  public details?: any;

  constructor(message: string, code: string = 'UNKNOWN_ERROR', details?: any) {
    super(message);
    this.name = 'ApiError';
    this.code = code;
    this.details = details;
  }
}

/**
 * Стандартный ответ API
 */
export interface ApiResponse<T> {
  success: boolean;
  data: T;
}

/**
 * Стандартный ответ об ошибке API
 */
export interface ApiErrorResponse {
  success: false;
  error: {
    message: string;
    code: string;
    details?: unknown;
  };
}
