/ src / lib / types.ts
types.ts
  1  /**
  2   * Coordenadas geográficas para resultados de tipo maps
  3   */
  4  export interface Coordinates {
  5    lat: number;  // Latitud
  6    lng: number;  // Longitud
  7  }
  8  
  9  /**
 10   * Tipos de búsqueda soportados por la aplicación
 11   */
 12  export type SearchType = 'web' | 'images' | 'videos' | 'audio' | 'document' | 'app' | 'maps';
 13  
 14  /**
 15   * Tipos de contenido soportados por YaCy
 16   */
 17  export enum ContentDomain {
 18    ALL = 'all',
 19    IMAGE = 'image',
 20    AUDIO = 'audio',
 21    VIDEO = 'video',
 22    APP = 'app',
 23    TEXT = 'text'
 24  }
 25  
 26  /**
 27   * Interfaz para representar un resultado de búsqueda
 28   */
 29  export interface SearchResult {
 30    title: string;              // Título del resultado
 31    link: string;               // URL del resultado
 32    description: string;        // Descripción o extracto del contenido
 33    type: SearchType;           // Tipo de contenido
 34    thumbnail?: string;         // URL de la miniatura o imagen
 35    image?: string;             // URL directa a la imagen (para resultados tipo imagen)
 36    imageWidth?: number;        // Ancho de la imagen si está disponible
 37    imageHeight?: number;       // Alto de la imagen si está disponible  
 38    language?: string;          // Código del idioma
 39    tags?: string[];            // Etiquetas relacionadas
 40    date?: Date;                // Fecha de publicación
 41    size?: string;              // Tamaño formateado
 42    score?: number;             // Puntuación de relevancia
 43    coordinates?: Coordinates;  // Coordenadas para resultados de mapas
 44    domain?: string;            // Dominio extraído del link (calculado)
 45    formattedUrl?: string;      // URL formateada para mostrar (calculado)
 46    _raw?: any;                 // Datos crudos originales (para depuración)
 47  }
 48  
 49  /**
 50   * Respuesta de la API de búsqueda
 51   */
 52  export interface SearchResponse {
 53    results: SearchResult[];     // Resultados de la búsqueda
 54    totalResults: number;        // Número total de resultados disponibles
 55    searchTime: number;          // Tiempo que tomó la búsqueda en segundos
 56    query: string;               // Consulta original
 57    page: number;                // Número de página actual
 58    error: string | null;        // Error si ocurrió alguno
 59  }
 60  
 61  /**
 62   * Parámetros de búsqueda soportados
 63   */
 64  export interface SearchParams {
 65    query: string;                   // Consulta de búsqueda
 66    type?: SearchType;               // Tipo de búsqueda
 67    language?: string;               // Filtro de idioma
 68    page?: number;                   // Página de resultados (0-indexed)
 69    resultadosPorPagina?: number;    // Resultados por página
 70    recurso?: string;                // Recurso de búsqueda (local, global)
 71    preferMask?: string;             // Filtro de preferencia de máscara
 72    constraints?: string;            // Restricciones adicionales
 73    mediaSearch?: string;            // Configuración de búsqueda de medios
 74  }
 75  
 76  /**
 77   * Configuración de la API YaCy
 78   */
 79  export interface YacyConfig {
 80    baseUrl: string;              // URL base del servidor YaCy
 81    timeout: number;              // Timeout para las peticiones en ms
 82    defaultMaxResults: number;    // Número máximo de resultados por defecto
 83    imageMaxResults: number;      // Número máximo de resultados para imágenes
 84  }
 85  
 86  /**
 87   * Estado global de la aplicación
 88   */
 89  export interface AppState {
 90    searchParams: SearchParams;   // Parámetros de búsqueda actuales
 91    darkMode: boolean;            // Modo oscuro activado/desactivado
 92    viewColumns: number;          // Número de columnas en la vista de resultados
 93    mapState: MapState;           // Estado del mapa
 94  }
 95  
 96  /**
 97   * Estado del mapa
 98   */
 99  export interface MapState {
100    center: Coordinates;          // Centro del mapa
101    zoom: number;                 // Nivel de zoom
102    markers: Coordinates[];       // Marcadores en el mapa
103    offline: boolean;             // Modo offline activado/desactivado
104  }