import logging
from datetime import datetime
from .ict_core import ICTCore
import numpy as np
import math
from utils import load_config
from risk_manager import RiskManager

logger = logging.getLogger("ICTSignalEngine")

ict_core = ICTCore()

# Instantiate RiskManager
config = load_config()
risk_manager = RiskManager(config)

# No duplicate position blocking; only risk and cooldown are enforced in execution_handler
# Example function for generating a trade signal
# (You may need to adapt this to your actual signal generation logic)
def generate_trade_signal(entry, stop_loss, direction, symbol="USTECH100M"):
    # Calculate position size using new RiskManager
    position_size = risk_manager.calculate_position_size(entry, stop_loss, symbol)
    if position_size <= 0:
        logger.error("Position size is zero or invalid. Trade rejected.")
        return None
    # Calculate take profit with minimum RR (use config or default 1.5)
    rr_ratio = config.get('risk_management', {}).get('min_risk_reward_ratio', 1.5)
    risk_distance = abs(entry - stop_loss)
    take_profit = entry + (risk_distance * rr_ratio) if direction == "BUY" else entry - (risk_distance * rr_ratio)
    signal = {
        'symbol': symbol,
        'direction': direction,
        'entry': entry,
        'stop_loss': stop_loss,
        'take_profit': take_profit,
        'position_size': position_size
    }
    # Validate signal before returning
    if not risk_manager.validate_signal(signal):
        logger.error("Trade signal failed risk validation. Rejected.")
        return None
    return signal
