/**
 * 네트워크 관련 타입 정의
 */

// 네트워크 상태 타입
export type NetworkStatus = 'online' | 'offline' | 'reconnecting';

// 동기화 작업 큐 아이템 타입
export interface SyncQueueItem {
  id: string;
  type: 'upload' | 'download' | 'delete';
  entityType: 'transaction' | 'budget' | 'categoryBudget';
  data: Record<string, unknown>;
  timestamp: number;
  retryCount: number;
}

// 네트워크 이벤트 핸들러 인터페이스
export interface NetworkEventHandlers {
  handleOnline: () => void;
  handleOffline: () => void;
}

// 확장된 Window 인터페이스
export interface ExtendedWindow extends Window {
  __networkHandlers?: NetworkEventHandlers;
}

// 재시도 옵션 인터페이스
export interface RetryOptions<T> {
  maxRetries?: number;
  retryDelay?: number;
  onRetry?: (attempt: number, error: Error | unknown) => void;
  shouldRetry?: (error: Error | unknown) => boolean;
  entityType?: string; // 동기화 작업 유형 (예: '트랜잭션 업로드', '예산 다운로드' 등)
}
