interface LiveLocation {
  lat: number;
  lng: number;
  address: string;
  addressComponents: google.maps.GeocoderAddressComponent[];
}
export const formatFileSize = (sizeInBytes: number): string => {
    if (sizeInBytes >= 1e9) {
      // Convert to GB
      return (sizeInBytes / 1e9).toFixed(2) + " GB";
    } else if (sizeInBytes >= 1e6) {
      // Convert to MB
      return (sizeInBytes / 1e6).toFixed(2) + " MB";
    } else if (sizeInBytes >= 1e3) {
      // Convert to KB
      return (sizeInBytes / 1e3).toFixed(2) + " KB";
    } else {
      // Bytes
      return sizeInBytes + " Bytes";
    }
  };
  export const getLiveLocationWithAddress = (): Promise<LiveLocation> => {
  return new Promise((resolve, reject) => {
    if (!navigator.geolocation) {
      reject(new Error("Geolocation is not supported by your browser."));
      return;
    }

    navigator.geolocation.getCurrentPosition(
      (position) => {
        const lat = position.coords.latitude;
        const lng = position.coords.longitude;

        if (!window.google || !window.google.maps) {
          reject(new Error("Google Maps JavaScript API is not loaded."));
          return;
        }

        const geocoder = new window.google.maps.Geocoder();
        const location = { lat, lng };

        geocoder.geocode({ location }, (results, status) => {
          if (status === 'OK' && results && results.length > 0) {
            resolve({
              lat,
              lng,
              address: results[0].formatted_address,
              addressComponents: results[0].address_components
            });
          } else {
            reject(new Error("Failed to reverse geocode location."));
          }
        });
      },
      (error) => {
        reject(new Error("Unable to retrieve your location. Permission denied or unavailable."));
      },
      {
        enableHighAccuracy: true,
        timeout: 10000,
        maximumAge: 0
      }
    );
  });
};

export const waitForGoogleMaps = (): Promise<void> => {
  return new Promise((resolve, reject) => {
    if (typeof window !== 'undefined' && window.google?.maps) {
      resolve();
    } else {
      let retries = 0;
      const interval = setInterval(() => {
        if (window.google?.maps) {
          clearInterval(interval);
          resolve();
        } else if (retries > 20) {
          clearInterval(interval);
          reject(new Error("Google Maps JavaScript API failed to load."));
        }
        retries++;
      }, 250);
    }
  });
};

