namespace AcDream.UI.Abstractions.Panels.Settings;
///
/// Per-character preferences persisted to settings.json under
/// character[toonName]. Settings on this tab are scoped to a
/// single toon; switching characters loads a different bag.
///
///
/// L.0 scope: local-only. The settings here describe how the
/// client UI behaves for the active toon — they don't yet flow to the
/// server. When server-sync ships, options like
/// would be pushed via the retail Player-Options packet.
///
///
///
/// MVP shape — four settings only. Easy to grow when more per-toon
/// preferences land. Each is value-typed so equality and Cancel-revert
/// behave like the other tabs' records.
///
///
public sealed record CharacterSettings(
string DefaultChatChannel, // "Local" / "Allegiance" / "Fellowship" / "General" / etc.
bool AutoAttack, // Tap-to-attack continues swinging until target dies
bool ConfirmSalvage, // Prompt before salvaging valuable items
bool ShowPickupMessages) // "You picked up X" lines in chat
{
/// Defaults applied to a fresh character (no settings.json
/// entry yet). Conservative — opt-in for AutoAttack, opt-in for
/// confirmation prompts, pickup messages on by default.
public static CharacterSettings Default { get; } = new(
DefaultChatChannel: "Local",
AutoAttack: false,
ConfirmSalvage: true,
ShowPickupMessages: true);
/// Channel-name presets exposed in the dropdown. Order
/// roughly matches retail's chat-channel routing.
public static System.Collections.Generic.IReadOnlyList AvailableChannels { get; } = new[]
{
"Local",
"Allegiance",
"Fellowship",
"General",
"Trade",
"LFG",
"Roleplay",
};
}