"""
AkDevz AI Market Intelligence — Order Execution Worker
Invoked via CLI from PHP MVC backend to safely submit paper or live broker orders.
"""
import sys
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))

import json
import argparse
from python.trading.execution_engine import ExecutionEngine
from python.data.market_feed import MarketFeed

def main():
    parser = argparse.ArgumentParser(description="Order Execution Worker")
    parser.add_argument("--symbol", type=str, required=True)
    parser.add_argument("--direction", type=str, default="BUY", choices=["BUY", "SELL"])
    parser.add_argument("--quantity", type=int, default=1)
    parser.add_argument("--price", type=float, default=0.0)
    parser.add_argument("--sl", type=float, default=0.0)
    parser.add_argument("--target", type=float, default=0.0)
    parser.add_argument("--strategy", type=str, default="MANUAL_ALGO_TRIGGER")
    args = parser.parse_args()

    entry_price = args.price
    if entry_price <= 0:
        quote = MarketFeed.get_real_quote(args.symbol)
        entry_price = float(quote.get("ltp") or 0.0)

    if entry_price <= 0:
        print(json.dumps({"status": "rejected", "reason": f"Unable to fetch valid live market price for {args.symbol}."}))
        sys.exit(0)

    sl = args.sl
    target = args.target
    if sl <= 0:
        sl = round(entry_price * 0.99 if args.direction == "BUY" else entry_price * 1.01, 2)
    if target <= 0:
        target = round(entry_price * 1.02 if args.direction == "BUY" else entry_price * 0.98, 2)

    candidate = {
        "symbol": args.symbol,
        "direction": args.direction,
        "entry_price": entry_price,
        "quantity": args.quantity,
        "stop_loss": sl,
        "target_1": target,
        "strategy_name": args.strategy
    }

    engine = ExecutionEngine()
    result = engine.execute_order(candidate)
    print(json.dumps(result))

if __name__ == "__main__":
    main()
