// src/assets/AssetManager.ts

import * as FileSystem from 'expo-file-system';
import { Asset } from 'expo-asset';

export class AssetManager {
  /**
   * Loads an asset.
   * @param assetSource - Either a local asset (using require) or a remote URI.
   */
  static async loadAsset(assetSource: number | string): Promise<Asset> {
    let asset: Asset;
    if (typeof assetSource === 'number') {
      // Local asset (e.g. require('./model.glb'))
      asset = Asset.fromModule(assetSource);
      if (!asset.downloaded) {
        await asset.downloadAsync();
      }
    } else {
      // Remote asset URL
      asset = new Asset({ uri: assetSource, name: assetSource, type: 'unknown' });
      await asset.downloadAsync();
    }
    return asset;
  }

  /**
   * Loads multiple assets concurrently.
   */
  static async loadAssets(assetSources: (number | string)[]): Promise<Asset[]> {
    const promises = assetSources.map(src => this.loadAsset(src));
    return Promise.all(promises);
  }
}