/** Estado de una query */
export interface QueryState<T> {
  data: T | null
  loading: boolean
  error: Error | null
  isStale: boolean
  lastUpdated: Date | null
}

/** Opciones comunes para queries */
export interface QueryOptions {
  /** Ejecutar automáticamente (default: true) */
  enabled?: boolean
  /** Auto-refetch cada N ms */
  refetchInterval?: number
  /** Refetch cuando la ventana gana foco */
  refetchOnFocus?: boolean
  /** Tiempo en ms antes de considerar datos stale (default: 0) */
  staleTime?: number
  /** Tiempo en ms en cache después de unmount (default: 5 min) */
  cacheTime?: number
  /** Número de reintentos en error (default: 3) */
  retry?: number | boolean
  /** Delay entre reintentos en ms */
  retryDelay?: number
}

/** Opciones para mutations */
export interface MutationOptions {
  /** Reintentos en error */
  retry?: number | boolean
  /** Delay entre reintentos */
  retryDelay?: number
}

/** Resultado de un evento Wails */
export interface WailsEvent<T> {
  name: string
  data: T
  timestamp: Date
}

/** Estado de una mutation */
export interface MutationState<T> {
  data: T | null
  loading: boolean
  error: Error | null
}

/** Default options */
export const DEFAULT_QUERY_OPTIONS: Required<QueryOptions> = {
  enabled: true,
  refetchInterval: 0,
  refetchOnFocus: true,
  staleTime: 0,
  cacheTime: 5 * 60 * 1000, // 5 minutos
  retry: 3,
  retryDelay: 1000,
}

export const DEFAULT_MUTATION_OPTIONS: Required<MutationOptions> = {
  retry: 0,
  retryDelay: 1000,
}
