using System.Numerics;
using ChatTwo.Util;
using Dalamud.Interface;
using Dalamud.Utility;
using ImGuiNET;
using Lumina.Excel.GeneratedSheets;

namespace ChatTwo.Ui;

internal class CommandHelp {
    private ChatLog Log { get; }
    private TextCommand Command { get; }

    internal CommandHelp(ChatLog log, TextCommand command) {
        this.Log = log;
        this.Command = command;
    }

    internal void Draw() {
        var width = 350 * ImGuiHelpers.GlobalScale;

        var pos = this.Log.LastWindowPos;
        switch (this.Log.Ui.Plugin.Config.CommandHelpSide) {
            case CommandHelpSide.Right:
                pos.X += this.Log.LastWindowSize.X;
                break;
            case CommandHelpSide.Left:
                pos.X -= width;
                break;
            case CommandHelpSide.None:
            default:
                return;
        }

        ImGui.SetNextWindowPos(pos);

        ImGui.SetNextWindowSizeConstraints(
            new Vector2(width, 0),
            new Vector2(width, this.Log.LastWindowSize.Y)
        );

        const ImGuiWindowFlags flags = ImGuiWindowFlags.NoSavedSettings
                                       | ImGuiWindowFlags.NoTitleBar
                                       | ImGuiWindowFlags.NoMove
                                       | ImGuiWindowFlags.NoResize
                                       | ImGuiWindowFlags.NoFocusOnAppearing
                                       | ImGuiWindowFlags.AlwaysAutoResize;
        if (!ImGui.Begin($"command help {this.Command.RowId}", flags)) {
            ImGui.End();
            return;
        }

        this.Log.DrawChunks(ChunkUtil.ToChunks(this.Command.Description.ToDalamudString(), ChunkSource.None, null).ToList());

        ImGui.End();
    }
}
