extends Node

const NPC_SCENE: PackedScene = preload("res://scenes/entities/npc/npc.tscn")

func _npc_root() -> Node3D:
  var n: Node = get_node_or_null("/root/World/EntityRoot/Npcs")
  return n

func spawn_default_npcs() -> void:
  var root := _npc_root()
  if root == null:
    return
  var profiles: Array = [
    _make_profile(&"barkeep", "Brena",
      "Wirtin der Krumme-Wagen-Taverne in Schimmerthal. Übernahm das Haus von ihrer Großmutter Mara, die als Kind den ersten Schlund über Aerwen aufreißen sah. Kennt jede Geschichte des Dorfes und erzählt sie gern weiter.",
      "Warm, geschwätzig, hat ihr ganzes Leben in Schimmerthal verbracht. Spricht gerne von früher und vom Anker unter der Taverne, an dem die Reisenden hängen."),
    _make_profile(&"smith", "Halvor",
      "Schmied von Schimmerthal. Verlor sein rechtes Auge an einen Knochenwächter im fünften Sommer nach den Schlünden. Schmiedet Waffen für die Reisenden und sagt, jedes gute Stück Stahl sei ein Stück Schuld, das er zurückzahlt.",
      "Grob, knapp, hängt am Dorf. Wenig Geduld für Mätzchen, aber stiller Respekt vor jedem Reisenden, der den Anker hält. Spricht ungern über das Auge, aber lügt nicht darüber."),
    _make_profile(&"sage", "Eyrie",
      "Die Murmlerin von Schimmerthal. Alt genug, um sich an die Zeit vor den Schlünden zu erinnern. Liest die Risse — weiß oft tagelang vorher, wann ein roter Schlund aufbricht. Lebt in einer Hütte am Rand des Dorfes.",
      "Kryptisch, langsam, müde. Antwortet oft mit einer Gegenfrage. Wenn etwas zu groß ist für eine Antwort, sagt sie: 'Frag den Anker, wenn du willst.' Lächelt selten, aber wenn, dann nicht freundlich."),
    _make_profile(&"farmer", "Rolf",
      "Bauer in Schimmerthal. Bestellt die kleinen Felder östlich des Dorfes. Hat zwei Söhne an die Schlünde verloren, spricht aber nicht darüber. Glaubt nicht, dass die Wirren je enden.",
      "Ängstlich, praktisch, müde. Wünscht sich, dass die Kriege enden, hofft aber nicht mehr darauf. Vermeidet Reisende eher, antwortet höflich, aber kurz."),
  ]
  var radius: float = 6.0
  for i in range(profiles.size()):
    var angle: float = float(i) * TAU / float(profiles.size()) + 0.3
    var pos := Vector3(cos(angle) * radius, 0.0, sin(angle) * radius)
    var npc: StaticBody3D = NPC_SCENE.instantiate()
    npc.profile = profiles[i]
    npc.profile_id = profiles[i].npc_id
    npc.name = "Npc_%s" % str(profiles[i].npc_id)
    root.add_child(npc, true)
    npc.global_position = pos

func _make_profile(id: StringName, name: String, lore: String, pers: String) -> NpcProfile:
  var p := NpcProfile.new()
  p.npc_id = id
  p.display_name = name
  p.lore = lore
  p.personality = pers
  p.fallback_text = "..."
  p.greeting = "Hallo, Reisender."
  p.color = Color(0.55 + randf() * 0.35, 0.5 + randf() * 0.3, 0.4 + randf() * 0.3)
  return p
