/**
 * @mvp-factory/holy-pwa
 * 
 * Progressive Web App utilities and templates
 * Extracted from Holy Habit PWA implementation
 */

// Main classes
export { ManifestGenerator } from './templates/ManifestGenerator';
export { ServiceWorkerGenerator } from './templates/ServiceWorkerGenerator';
export { PWAManager } from './utils/PWAManager';

// Types and interfaces
export * from './types/PWA';

// Default exports for convenience
import { ManifestGenerator } from './templates/ManifestGenerator';
import { ServiceWorkerGenerator } from './templates/ServiceWorkerGenerator';
import { PWAManager } from './utils/PWAManager';

export default {
  ManifestGenerator,
  ServiceWorkerGenerator,
  PWAManager
};

// Factory functions for quick setup
export function createManifest(config: any) {
  return new ManifestGenerator(config);
}

export function createServiceWorker(config: any) {
  return new ServiceWorkerGenerator(config);
}

export function createPWAManager(events?: any) {
  return new PWAManager(events);
}

// Quick setup for common PWA types
export const HolyPWA = {
  // Create manifest generator with templates
  createManifest: (config: any) => new ManifestGenerator(config),
  
  // Create service worker generator with templates
  createServiceWorker: (config: any) => new ServiceWorkerGenerator(config),
  
  // Create PWA manager
  createManager: (events?: any) => new PWAManager(events),
  
  // Get manifest templates
  manifestTemplates: ManifestGenerator.createTemplates(),
  
  // Get service worker templates
  serviceWorkerTemplates: ServiceWorkerGenerator.createTemplates(),
  
  // Utility functions
  utils: {
    isStandalone: () => {
      return window.matchMedia('(display-mode: standalone)').matches ||
             (window.navigator as any).standalone === true;
    },
    
    isServiceWorkerSupported: () => {
      return 'serviceWorker' in navigator;
    },
    
    isPWAInstallable: () => {
      return 'serviceWorker' in navigator && 
             'PushManager' in window &&
             'indexedDB' in window;
    },
    
    getDisplayMode: () => {
      if (window.matchMedia('(display-mode: standalone)').matches) return 'standalone';
      if (window.matchMedia('(display-mode: fullscreen)').matches) return 'fullscreen';
      if (window.matchMedia('(display-mode: minimal-ui)').matches) return 'minimal-ui';
      return 'browser';
    }
  }
};

// Version info
export const version = '1.0.0';
export const name = '@mvp-factory/holy-pwa';