// ══ src/services/ai/IAIService.ts — Typen (aktuell Zeilen 200–232) ══
// ── Exposé texts (Livia) ──────────────────────────────────────────────────────

/**
 * Die Textabschnitte eines Exposés. Jeder lässt sich einzeln erzeugen —
 * gesamthaft heisst schlicht: alle nacheinander (Runde 4, §8.5.2).
 */
export const ExposeTextSection = {
  TITLE: 'TITLE',
  TEASER: 'TEASER',
  OBJECT: 'OBJECT',
  LOCATION: 'LOCATION',
  MUNICIPALITY: 'MUNICIPALITY',
  FEATURES: 'FEATURES',
  HIGHLIGHTS: 'HIGHLIGHTS',
} as const
export type ExposeTextSection = typeof ExposeTextSection[keyof typeof ExposeTextSection]

export type ExposeTonality = 'SACHLICH' | 'HOCHWERTIG' | 'EINLADEND'

export interface ExposeTextInput {
  section: ExposeTextSection
  tonality: ExposeTonality
  /** Ausschliesslich belegte Angaben aus «Meine Objekte» — nichts Erfundenes. */
  facts: Record<string, string | number | undefined>
}

export interface ExposeTextResult {
  section: ExposeTextSection
  text: string
  /** Angaben, die für einen vollständigen Text fehlen — statt sie zu erfinden. */
  missingFacts: string[]
}


// ══ src/services/ai/IAIService.ts — Methode im Interface (Zeile 281) ══
  recommendPreMarketRent(input: PreMarketRentInput): Promise<AIResponse<PreMarketRentRecommendation>>

  // Exposé-Texte (Livia) — pro Abschnitt auslösbar
  generateExposeText(input: ExposeTextInput): Promise<AIResponse<ExposeTextResult>>

  // Legacy methods

// ══ src/services/ai/mock/MockAIService.ts — Importe (17-18, 25) ══
  ExposeTextInput,
  ExposeTextResult,
import { buildExposeText } from './exposeTextBuilder'

// ══ src/services/ai/mock/MockAIService.ts — Implementierung (303-310) ══
    }),

  generateExposeText: (input: ExposeTextInput) =>
    traceMock<ExposeTextResult>('generateExposeText', async () => {
      await delay(SIMULATED_DELAY.medium)
      return { data: buildExposeText(input), provenance: mockProvenance() }
    }),


// ══ src/services/ai/backend/BackendAIService.ts — Importe (62-63) ══
  ExposeTextInput,
  ExposeTextResult,

// ══ src/services/ai/backend/BackendAIService.ts — Delegation (678-690) ══
  },

  // ── generateExposeText ──────────────────────────────────────────────────────
  //
  // Bewusst ohne eigenen LLM-Aufruf: der Text darf ausschliesslich auf erfassten
  // Objektdaten beruhen (Runde 4, §8.5.2). Ein freies Sprachmodell würde genau
  // die fehlenden Angaben plausibel ergänzen, die hier rot markiert gehören.
  // Deshalb erzeugt auch im Backend-Betrieb der deterministische Builder den
  // Entwurf; er nennt Lücken, statt sie zu füllen.
  generateExposeText(input: ExposeTextInput): Promise<AIResponse<ExposeTextResult>> {
    return MockAIService.generateExposeText(input)
  },

