/**
 * Location Formatting Utilities
 * 
 * Centralized utilities for formatting location data consistently across the app.
 */

export interface LocationData {
  street_address?: string | null;
  city?: string | null;
  state_province?: string | null;
  country?: string | null;
  postal_code?: string | null;
}

/**
 * Format location for display
 * @param location - Location data object
 * @param includeStreet - Whether to include street address in the output
 * @returns Formatted location string or null if no location data
 */
export function formatLocationDisplay(
  location: LocationData | null | undefined, 
  includeStreet: boolean = false
): string | null {
  if (!location) return null;

  const parts: string[] = [];
  
  if (includeStreet && location.street_address) {
    parts.push(location.street_address);
  }
  
  if (location.city) {
    parts.push(location.city);
  }
  
  if (location.state_province) {
    parts.push(location.state_province);
  }
  
  if (location.country) {
    parts.push(location.country);
  }
  
  return parts.length > 0 ? parts.join(', ') : null;
}

/**
 * Format full address including street
 * @param location - Location data object
 * @returns Formatted full address or null if no location data
 */
export function formatFullAddress(location: LocationData | null | undefined): string | null {
  return formatLocationDisplay(location, true);
}

/**
 * Format location without street address (city, state, country only)
 * @param location - Location data object
 * @returns Formatted location without street or null if no location data
 */
export function formatLocationShort(location: LocationData | null | undefined): string | null {
  return formatLocationDisplay(location, false);
}
