using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.Collections.Generic;
///
/// Programmatically builds the complete in-game HUD inside the InGame canvas (Client.unity).
///
/// Call BuildNow() from GameManager.OnSceneLoaded BEFORE BindClientScene so GameManager_UI
/// can locate named children.
///
/// Named elements expected by GameManager_UI (Transform.Find / FindTMP):
/// ActionButton – proxim action button
/// SabotagePanel – top-of-screen sabotage banner
/// SabotageTimer – TMP countdown text inside SabotagePanel
/// MeetingPanel – full-screen voting overlay
/// MeetingHeader – TMP title
/// MeetingPlayerList – TMP player list (text fallback)
/// SkipButton – skip-vote button
/// VoteResultPanel – sub-panel shown after voting
/// VoteResult – TMP result text
/// GameEndPanel – full-screen end-of-game overlay
/// GameEndText – TMP result text
/// KillCooldown – TMP kill-cooldown label
/// TaskList – TMP task name list
/// TaskProgress – TMP global task progress
/// Toast – TMP toast notification
///
public class InGameHUDBuilder : MonoBehaviour
{
// ── Palette ───────────────────────────────────────────────────────────────
static Color H(string hex) { ColorUtility.TryParseHtmlString(hex, out var c); return c; }
static readonly Color C_BG = H("#0D0F1A");
static readonly Color C_BAR = H("#141927");
static readonly Color C_ACCENT = H("#3399FF");
static readonly Color C_GREEN = H("#2DB84B");
static readonly Color C_RED = H("#C43232");
static readonly Color C_ORANGE = H("#F08C1A");
static readonly Color C_YELLOW = H("#FFB800");
static readonly Color C_MUTED = new Color(0.47f, 0.53f, 0.67f);
static readonly Color C_ROW_A = H("#1A2035");
static readonly Color C_ROW_B = H("#161C2E");
private bool _built;
public void BuildNow() { if (!_built) { _built = true; Build(); } }
void Start() { if (!_built) Build(); }
void Build()
{
var rt = GetComponent();
if (rt == null) return;
BuildTopBar(rt);
BuildTaskPanel(rt);
BuildTaskProgress(rt);
BuildBottomBar(rt);
BuildActionButton(rt);
BuildSabotagePanel(rt);
BuildMeetingPanel(rt);
BuildGameEndPanel(rt);
BuildToast(rt);
}
// ── Top bar ───────────────────────────────────────────────────────────────
void BuildTopBar(RectTransform parent)
{
var bar = Child("_TopBar", parent);
Anchor(bar, new Vector2(0,1), new Vector2(1,1), new Vector2(0,-90f), Vector2.zero);
bar.pivot = new Vector2(0.5f,1f);
Img(bar, C_BAR);
// Kill cooldown – right half, hidden by default
var cd = Child("KillCooldown", bar);
cd.anchorMin = new Vector2(0.5f, 0); cd.anchorMax = Vector2.one;
cd.offsetMin = new Vector2(0, 6); cd.offsetMax = new Vector2(-12, -6);
var cdTmp = cd.gameObject.AddComponent();
cdTmp.text = ""; cdTmp.fontSize = 32; cdTmp.color = C_ORANGE;
cdTmp.fontStyle = FontStyles.Bold; cdTmp.alignment = TextAlignmentOptions.MidlineRight;
cd.gameObject.SetActive(false);
}
// ── Task panel (right side) ───────────────────────────────────────────────
void BuildTaskPanel(RectTransform parent)
{
var panel = Child("_TaskPanel", parent);
panel.anchorMin = new Vector2(1,0.35f); panel.anchorMax = new Vector2(1,0.88f);
panel.pivot = new Vector2(1,0.5f); panel.sizeDelta = new Vector2(280,0);
Img(panel, new Color(0.05f,0.06f,0.12f,0.85f));
var hdr = Child("_Hdr", panel);
Anchor(hdr, new Vector2(0,1), new Vector2(1,1), new Vector2(0,-44), Vector2.zero);
hdr.pivot = new Vector2(0.5f,1f);
Img(hdr, new Color(0.2f,0.6f,1f,0.5f));
TxtChild(hdr,"MY TASKS",26,Color.white,TextAlignmentOptions.Center,bold:true);
var body = Child("TaskList", panel);
body.anchorMin = Vector2.zero; body.anchorMax = Vector2.one;
body.offsetMin = new Vector2(8,8); body.offsetMax = new Vector2(-8,-48);
var t = body.gameObject.AddComponent();
t.text = ""; t.fontSize = 22; t.color = Color.white; t.alignment = TextAlignmentOptions.TopLeft;
t.enableWordWrapping = true;
}
// ── Task progress (above bottom bar) ─────────────────────────────────────
void BuildTaskProgress(RectTransform parent)
{
var prog = Child("TaskProgress", parent);
Anchor(prog, new Vector2(0,0), new Vector2(1,0), new Vector2(-20,120), new Vector2(20,160));
var t = prog.gameObject.AddComponent();
t.text = ""; t.fontSize = 28; t.color = Color.white;
t.fontStyle = FontStyles.Bold; t.alignment = TextAlignmentOptions.Center;
}
// ── Bottom bar ────────────────────────────────────────────────────────────
void BuildBottomBar(RectTransform parent)
{
var bar = Child("_BottomBar", parent);
Anchor(bar, Vector2.zero, new Vector2(1,0), Vector2.zero, new Vector2(0,110));
bar.pivot = new Vector2(0.5f,0);
Img(bar, C_BAR);
var recBtn = Child("_RecenterBtn", bar);
recBtn.anchorMin = new Vector2(0.82f,0.08f); recBtn.anchorMax = new Vector2(0.98f,0.92f);
var recBg = Img(recBtn, C_ACCENT);
var recButton = recBtn.gameObject.AddComponent