import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { SiteStructure, GenerationVersion } from '../core/models/llm'; export interface PromptEntry { originalPrompt: string; refinedPrompt: string | null; result: SiteStructure | null; timestamp: Date; } @Injectable({ providedIn: 'root' }) export class LlmSessionService { private currentPromptSubject = new BehaviorSubject(''); private currentResultSubject = new BehaviorSubject(null); private historySubject = new BehaviorSubject([]); private generatingSubject = new BehaviorSubject(false); private errorSubject = new BehaviorSubject(null); private versionsSubject = new BehaviorSubject([]); private currentVersionIdSubject = new BehaviorSubject(null); private loadingVersionsSubject = new BehaviorSubject(false); currentPrompt$ = this.currentPromptSubject.asObservable(); currentResult$ = this.currentResultSubject.asObservable(); history$ = this.historySubject.asObservable(); generating$ = this.generatingSubject.asObservable(); error$ = this.errorSubject.asObservable(); versions$ = this.versionsSubject.asObservable(); currentVersionId$ = this.currentVersionIdSubject.asObservable(); loadingVersions$ = this.loadingVersionsSubject.asObservable(); get currentPrompt(): string { return this.currentPromptSubject.value; } get currentResult(): SiteStructure | null { return this.currentResultSubject.value; } get generating(): boolean { return this.generatingSubject.value; } get error(): string | null { return this.errorSubject.value; } get versions(): GenerationVersion[] { return this.versionsSubject.value; } get currentVersionId(): string | null { return this.currentVersionIdSubject.value; } setPrompt(prompt: string): void { this.currentPromptSubject.next(prompt); this.errorSubject.next(null); } setResult(result: SiteStructure): void { this.currentResultSubject.next(result); const entry: PromptEntry = { originalPrompt: this.currentPromptSubject.value, refinedPrompt: null, result, timestamp: new Date(), }; const history = this.historySubject.value; this.historySubject.next([...history, entry]); this.generatingSubject.next(false); this.errorSubject.next(null); } clearResult(): void { this.currentResultSubject.next(null); } setGenerating(generating: boolean): void { this.generatingSubject.next(generating); } setError(error: string): void { this.errorSubject.next(error); this.generatingSubject.next(false); } clearError(): void { this.errorSubject.next(null); } clearHistory(): void { this.historySubject.next([]); this.currentResultSubject.next(null); this.currentPromptSubject.next(''); this.currentVersionIdSubject.next(null); this.errorSubject.next(null); } setVersions(versions: GenerationVersion[]): void { this.versionsSubject.next(versions); this.loadingVersionsSubject.next(false); } setLoadingVersions(loading: boolean): void { this.loadingVersionsSubject.next(loading); } setCurrentVersionId(id: string | null): void { this.currentVersionIdSubject.next(id); } loadVersionData(structure: SiteStructure, versionId: string): void { this.currentResultSubject.next(structure); this.currentVersionIdSubject.next(versionId); this.generatingSubject.next(false); this.errorSubject.next(null); } }