using Managing.Domain.Bots;
using Managing.Domain.Workflows;

namespace Managing.Application.Abstractions
{
    public interface IBotFactory
    {
        IBot CreateSimpleBot(string botName, Workflow workflow);
        
        /// <summary>
        /// Creates a trading bot using the unified TradingBot class
        /// </summary>
        /// <param name="config">The trading bot configuration</param>
        /// <returns>ITradingBot instance</returns>
        ITradingBot CreateTradingBot(TradingBotConfig config);
        
        /// <summary>
        /// Creates a trading bot for backtesting using the unified TradingBot class
        /// </summary>
        /// <param name="config">The trading bot configuration</param>
        /// <returns>ITradingBot instance configured for backtesting</returns>
        ITradingBot CreateBacktestTradingBot(TradingBotConfig config);
        
        // Legacy methods - these will use TradingBot internally but maintain backward compatibility
        ITradingBot CreateScalpingBot(TradingBotConfig config);
        ITradingBot CreateBacktestScalpingBot(TradingBotConfig config);
        ITradingBot CreateFlippingBot(TradingBotConfig config);
        ITradingBot CreateBacktestFlippingBot(TradingBotConfig config);
    }
}
