import { PlatformService } from "./PlatformService"; import { WebPlatformService } from "./platforms/WebPlatformService"; import { CapacitorPlatformService } from "./platforms/CapacitorPlatformService"; import { ElectronPlatformService } from "./platforms/ElectronPlatformService"; import { PyWebViewPlatformService } from "./platforms/PyWebViewPlatformService"; /** * Factory class for creating platform-specific service implementations. * Implements the Singleton pattern to ensure only one instance of PlatformService exists. * * The factory determines which platform implementation to use based on the VITE_PLATFORM * environment variable. Supported platforms are: * - capacitor: Mobile platform using Capacitor * - electron: Desktop platform using Electron * - pywebview: Python WebView implementation * - web: Default web platform (fallback) * * @example * ```typescript * const platformService = PlatformServiceFactory.getInstance(); * await platformService.takePicture(); * ``` */ export class PlatformServiceFactory { private static instance: PlatformService | null = null; /** * Gets or creates the singleton instance of PlatformService. * Creates the appropriate platform-specific implementation based on environment. * * @returns {PlatformService} The singleton instance of PlatformService */ public static getInstance(): PlatformService { if (PlatformServiceFactory.instance) { return PlatformServiceFactory.instance; } const platform = process.env.VITE_PLATFORM || "web"; switch (platform) { case "capacitor": PlatformServiceFactory.instance = new CapacitorPlatformService(); break; case "electron": PlatformServiceFactory.instance = new ElectronPlatformService(); break; case "pywebview": PlatformServiceFactory.instance = new PyWebViewPlatformService(); break; case "web": default: PlatformServiceFactory.instance = new WebPlatformService(); break; } return PlatformServiceFactory.instance; } }