using System.Collections.Concurrent;
using PolyTraderSharp.Models;

namespace PolyTraderSharp
{
    public enum TradingMode
    {
        Inactive,
        SellOnly,
        Active
    }

    /// <summary>
    /// In-Memory Hot-Path State (Core-Teil).
    /// Enthält den modulübergreifenden Zustand: eigene Accounts, globale Betriebsschalter,
    /// Markt-Cache und Gesamt-PnL. Copytrading-spezifischer Zustand liegt im CopyTradingState
    /// (siehe PolyTrader.Modules.CopyTrading).
    /// </summary>
    public class TradingState
    {
        // Globale Betriebsschalter
        public bool GlobalTradingPaused { get; set; } = false;
        public TradingMode LiveTradingMode { get; set; } = TradingMode.Inactive;
        public TradingMode DemoTradingMode { get; set; } = TradingMode.Inactive;
        public bool IsAlchemyHealthy { get; set; } = false;
        public bool EnableBlockchainParser { get; set; } = true;
        public bool DebugPollingLog { get; set; } = false;
        public bool DebugOrderPayloadLog { get; set; } = false;

        // Eigene Trading-Accounts (AccountId -> State)
        public ConcurrentDictionary<int, AccountState> Accounts { get; } = new();

        // Aggregierte PnL über alle Module (Dashboard/Overview)
        public decimal GlobalPnl { get; set; } = 0.0m;

        // High-Performance globaler Markt-Cache, verhindert DB-Flaschenhälse im Signalpfad.
        public ConcurrentDictionary<string, MarketData> MarketCache { get; } = new(StringComparer.OrdinalIgnoreCase);
    }
}
