"""
AkDevz AI Market Intelligence — Research & Backtesting Worker
Invoked by PHP research / backtesting UI to execute backtests, walk-forward validation,
and paper outcome verification asynchronously.
"""
import sys
import json
import argparse
from pathlib import Path

PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
if str(PROJECT_ROOT) not in sys.path:
    sys.path.insert(0, str(PROJECT_ROOT))

from python.data.market_feed import MarketFeed
from python.data.data_normalizer import DataNormalizer
from python.research.backtester import Backtester
from python.research.walk_forward import WalkForwardValidator
from python.research.learning_engine import LearningEngine

def run_research_job(symbol: str, strategy: str, action: str = "backtest") -> dict:
    candles_raw = MarketFeed.get_real_candles(symbol, count=150)
    candles_norm = DataNormalizer.normalize_candles(candles_raw)

    if action == "walk_forward":
        validator = WalkForwardValidator()
        return validator.run_walk_forward(candles_norm, strategy_name=strategy)
    elif action == "learning":
        engine = LearningEngine()
        return engine.review_strategy_degradation(strategy, candles_norm)
    else:  # default backtest
        backtester = Backtester(lot_size=25 if "NIFTY" in symbol else (15 if "BANKNIFTY" in symbol else 1))
        return backtester.run_backtest(candles_norm, strategy_name=strategy)

def main():
    parser = argparse.ArgumentParser(description="AkDevz Research Worker")
    parser.add_argument("--symbol", type=str, default="NSE:NIFTY50-INDEX", help="Symbol to analyze")
    parser.add_argument("--strategy", type=str, default="VWAP_PULLBACK", help="Strategy identifier")
    parser.add_argument("--action", type=str, default="backtest", choices=["backtest", "walk_forward", "learning"])
    args = parser.parse_args()

    try:
        res = run_research_job(args.symbol, args.strategy, args.action)
        print(json.dumps(res, indent=2))
        sys.exit(0)
    except Exception as e:
        err = {"status": "error", "message": str(e)}
        print(json.dumps(err))
        sys.exit(1)

if __name__ == "__main__":
    main()
