import type { Router } from 'express' import type { ServiceContainer } from '../../infra/container.js' import { createApiModule } from '../../infra/createModule.js' import { TIME_TRACKING_MODULE } from '../../../shared/modules/time-tracking/index.js' import { TimeTrackerService, initializeTimeTrackerService, type TimeTrackerServiceConfig } from './timeService.js' import { createTimeTrackingRoutes } from './routes.js' export * from './timeService.js' export * from './heartbeatService.js' export * from './sessionPersistence.js' export * from './routes.js' export interface TimeTrackingModuleConfig { config?: TimeTrackerServiceConfig } export const createTimeTrackingModule = (moduleConfig: TimeTrackingModuleConfig = {}) => { let serviceInstance: TimeTrackerService | undefined return createApiModule(TIME_TRACKING_MODULE, { routes: (container: ServiceContainer): Router => { const timeTrackerService = container.getSync('timeTrackerService') return createTimeTrackingRoutes({ timeTrackerService }) }, lifecycle: { onLoad: async (container: ServiceContainer): Promise => { serviceInstance = await initializeTimeTrackerService(moduleConfig.config) container.register('timeTrackerService', () => serviceInstance!) }, }, }) } export default createTimeTrackingModule