export interface GeoLocation {
  latitude: number;
  longitude: number;
  country: string;
  countryCode: string;
  region: string;
  city: string;
  timezone: string;
  source: 'ip' | 'client' | 'unknown';
}

export interface DeviceInfo {
  type: 'desktop' | 'mobile' | 'tablet' | 'wearable' | 'smarttv' | 'unknown';
  vendor?: string;
  model?: string;
}

export interface BrowserInfo {
  name: string;
  version: string;
  full: string;
}

export interface OSInfo {
  name: string;
  version: string;
  full: string;
}

export interface ClientContext {
  screenWidth?: number;
  screenHeight?: number;
  viewportWidth?: number;
  viewportHeight?: number;
  devicePixelRatio?: number;
  timezone?: string;
  language?: string;
  languages?: string[];
  platform?: string;
  hardwareConcurrency?: number;
  deviceMemory?: number;
  cookieEnabled?: boolean;
  doNotTrack?: string | null;
}

export interface GeoDeviceContext {
  geo: GeoLocation | null;
  device: DeviceInfo;
  browser: BrowserInfo;
  os: OSInfo;
  client: ClientContext;
  ip?: string;
  userAgent: string;
  acceptLanguage?: string;
  requestedAt: string;
}
