package domain

import "strings"

const SeedMasterPrompt = `Du bist ein Assistenzsystem fuer den QC-Text-Builder.
Erstelle nur ueberschreibbare Textvorschlaege fuer Draft-Felder, keine finale Build-Ausfuehrung.
Arbeite praezise, branchengerecht und nachvollziehbar.
Priorisiere klare, konversionsstarke Website-Texte, die zum Geschaeftskontext passen.
Wenn Informationen fehlen, markiere Annahmen transparent statt Inhalte zu erfinden.`

func DefaultPromptBlocks() []PromptBlockConfig {
	return []PromptBlockConfig{
		{
			ID:          "business_type",
			Label:       "Business Type / Branche",
			Instruction: "Nutze den Business-Type als Leitplanke fuer Fachsprache, Leistungsversprechen und relevante Keywords.",
			Enabled:     true,
		},
		{
			ID:          "website_summary",
			Label:       "Website-Zusammenfassung",
			Instruction: "Nutze die Website-Zusammenfassung als Input fuer USPs, Angebote und vorhandene Botschaften.",
			Enabled:     true,
		},
		{
			ID:          "style_market_locale",
			Label:       "Stil / Markt / Locale",
			Instruction: "Beachte Locale-Style und Markt-Style fuer Wortwahl, Begriffe und regionale Passung.",
			Enabled:     true,
		},
		{
			ID:          "address_mode",
			Label:       "Address Mode (du/sie)",
			Instruction: "Halte die Ansprache konsistent im gewaehlten Address Mode.",
			Enabled:     true,
		},
		{
			ID:          "content_tone",
			Label:       "Content Tone",
			Instruction: "Setze den gewaehlten Ton ueber Headlines, Fliesstext und CTA konsistent um.",
			Enabled:     true,
		},
		{
			ID:          "free_instructions",
			Label:       "Zusaetzliche freie Instruktionen",
			Instruction: "Beruecksichtige zusaetzliche Prompt-Instruktionen als harte Vorgaben fuer die Vorschlaege.",
			Enabled:     true,
		},
	}
}

func NormalizeMasterPrompt(value string) string {
	trimmed := strings.TrimSpace(value)
	if trimmed == "" {
		return SeedMasterPrompt
	}
	return trimmed
}

func NormalizePromptBlocks(blocks []PromptBlockConfig) []PromptBlockConfig {
	defaults := DefaultPromptBlocks()
	if len(blocks) == 0 {
		out := make([]PromptBlockConfig, len(defaults))
		copy(out, defaults)
		return out
	}

	defaultByID := make(map[string]PromptBlockConfig, len(defaults))
	for _, block := range defaults {
		defaultByID[block.ID] = block
	}

	used := make(map[string]struct{}, len(blocks))
	out := make([]PromptBlockConfig, 0, len(defaults))
	for _, block := range blocks {
		id := strings.TrimSpace(block.ID)
		if id == "" {
			continue
		}
		if _, seen := used[id]; seen {
			continue
		}
		base, ok := defaultByID[id]
		if !ok {
			base = PromptBlockConfig{ID: id, Label: id}
		}
		if strings.TrimSpace(block.Label) != "" {
			base.Label = strings.TrimSpace(block.Label)
		}
		if strings.TrimSpace(block.Instruction) != "" {
			base.Instruction = strings.TrimSpace(block.Instruction)
		}
		base.Enabled = block.Enabled
		out = append(out, base)
		used[id] = struct{}{}
	}

	for _, block := range defaults {
		if _, ok := used[block.ID]; ok {
			continue
		}
		out = append(out, block)
	}
	return out
}
