using System.ComponentModel.DataAnnotations;
using Managing.Domain.Candles;
using Managing.Domain.Indicators;
using Managing.Domain.Trades;
using static Managing.Common.Enums;

namespace Managing.Api.Models.Responses
{
    public class TradingBotResponse
    {
        /// <summary>
        /// Current status of the bot (Up, Down, etc.)
        /// </summary>
        [Required]
        public string Status { get; internal set; }

        /// <summary>
        /// Dictionary of signals generated by the bot, keyed by signal identifier
        /// </summary>
        [Required]
        public Dictionary<string, LightSignal> Signals { get; internal set; }

        /// <summary>
        /// Dictionary of positions opened by the bot, keyed by position identifier
        /// </summary>
        [Required]
        public Dictionary<Guid, Position> Positions { get; internal set; }

        /// <summary>
        /// Candles used by the bot for analysis
        /// </summary>
        [Required]
        public List<Candle> Candles { get; internal set; }

        /// <summary>
        /// Current win rate percentage
        /// </summary>
        [Required]
        public int WinRate { get; internal set; }

        /// <summary>
        /// Current profit and loss
        /// </summary>
        [Required]
        public decimal ProfitAndLoss { get; internal set; }

        /// <summary>
        /// Unique identifier for the bot
        /// </summary>
        [Required]
        public string Identifier { get; set; }

        /// <summary>
        /// Agent name associated with the bot
        /// </summary>
        [Required]
        public string AgentName { get; set; }

        /// <summary>
        /// The time when the bot was created
        /// </summary>
        [Required]
        public DateTime CreateDate { get; internal set; }

        /// <summary>
        /// The time when the bot was started
        /// </summary>
        [Required]
        public DateTime StartupTime { get; internal set; }

        [Required] public string Name { get; set; }

        /// <summary>
        /// The ticker/symbol being traded by this bot
        /// </summary>
        [Required]
        public Ticker Ticker { get; set; }
    }
}