import { EntityType, IEventBus } from '../../types/CalendarTypes'; import { TenantSetting, IWorkweekSettings, IGridSettings, ITimeFormatSettings, IViewSettings, IWorkweekPreset, SettingsIds } from '../../types/SettingsTypes'; import { SettingsStore } from './SettingsStore'; import { BaseEntityService } from '../BaseEntityService'; import { IndexedDBContext } from '../IndexedDBContext'; /** * SettingsService - CRUD operations for tenant settings * * Settings are stored as separate records per section. * This service provides typed methods for accessing specific settings. */ export class SettingsService extends BaseEntityService { readonly storeName = SettingsStore.STORE_NAME; readonly entityType: EntityType = 'Settings'; constructor(context: IndexedDBContext, eventBus: IEventBus) { super(context, eventBus); } /** * Get workweek settings */ async getWorkweekSettings(): Promise { return this.get(SettingsIds.WORKWEEK) as Promise; } /** * Get grid settings */ async getGridSettings(): Promise { return this.get(SettingsIds.GRID) as Promise; } /** * Get time format settings */ async getTimeFormatSettings(): Promise { return this.get(SettingsIds.TIME_FORMAT) as Promise; } /** * Get view settings */ async getViewSettings(): Promise { return this.get(SettingsIds.VIEWS) as Promise; } /** * Get workweek preset by ID */ async getWorkweekPreset(presetId: string): Promise { const settings = await this.getWorkweekSettings(); if (!settings) return null; return settings.presets[presetId] || null; } /** * Get the default workweek preset */ async getDefaultWorkweekPreset(): Promise { const settings = await this.getWorkweekSettings(); if (!settings) return null; return settings.presets[settings.defaultPreset] || null; } /** * Get all available workweek presets */ async getWorkweekPresets(): Promise { const settings = await this.getWorkweekSettings(); if (!settings) return []; return Object.values(settings.presets); } }