using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using FinlyticCore.Models.Analyzer;
namespace FinlyticCore.Models.Trades;
///
/// Trade proposal generated by FinlyticAnalyzer and dispatched via MQTT QoS 2.
///
public class TradeProposalDto
{
[JsonPropertyName("tradeId")]
public string TradeId { get; set; } = string.Empty;
[JsonPropertyName("userId")]
public string? UserId { get; set; }
[JsonPropertyName("isGlobalProposal")]
public bool IsGlobalProposal { get; set; } = true;
[JsonPropertyName("status")]
public string Status { get; set; } = "Proposed";
[JsonPropertyName("analysisId")]
public string AnalysisId { get; set; } = string.Empty;
[JsonPropertyName("eventId")]
public string EventId { get; set; } = string.Empty;
[JsonPropertyName("sector")]
public string Sector { get; set; } = string.Empty;
[JsonPropertyName("symbol")]
public string Symbol { get; set; } = string.Empty;
[JsonPropertyName("isin")]
public string Isin { get; set; } = string.Empty;
[JsonPropertyName("companyName")]
public string CompanyName { get; set; } = string.Empty;
[JsonPropertyName("entryPrice")]
public decimal EntryPrice { get; set; }
[JsonPropertyName("stopLoss")]
public decimal StopLoss { get; set; }
[JsonPropertyName("takeProfit")]
public decimal TakeProfit { get; set; }
[JsonPropertyName("signalType")]
public string SignalType { get; set; } = "BUY"; // "BUY", "SELL"
[JsonPropertyName("riskTolerance")]
public string RiskTolerance { get; set; } = "Moderate"; // "Conservative", "Moderate", "Aggressive"
[JsonPropertyName("timeframe")]
public string Timeframe { get; set; } = "1D"; // "1H", "4H", "1D", "1W"
[JsonPropertyName("instrumentType")]
public string InstrumentType { get; set; } = "Stock"; // "Stock", "Option", "CFD", "Crypto"
[JsonPropertyName("derivativeIsin")]
public string? DerivativeIsin { get; set; }
[JsonPropertyName("winRate")]
public double WinRate { get; set; }
[JsonPropertyName("vixRegime")]
public VixMarketRegime VixRegime { get; set; }
[JsonPropertyName("vixValue")]
public decimal VixValue { get; set; }
[JsonPropertyName("ttlMinutes")]
public int TtlMinutes { get; set; } = 60;
[JsonPropertyName("reasoning")]
public string Reasoning { get; set; } = string.Empty;
// --- New Fields for Detailed Execution & Rationale ---
[JsonPropertyName("entryZoneMin")]
public decimal? EntryZoneMin { get; set; }
[JsonPropertyName("entryZoneMax")]
public decimal? EntryZoneMax { get; set; }
[JsonPropertyName("takeProfitTargets")]
public List? TakeProfitTargets { get; set; }
[JsonPropertyName("riskRewardRatio")]
public decimal? RiskRewardRatio { get; set; }
[JsonPropertyName("maxLeverage")]
public decimal? MaxLeverage { get; set; }
[JsonPropertyName("technicalRationale")]
public string TechnicalRationale { get; set; } = string.Empty;
[JsonPropertyName("fundamentalRationale")]
public string FundamentalRationale { get; set; } = string.Empty;
[JsonPropertyName("riskWarning")]
public string RiskWarning { get; set; } = string.Empty;
// --- Real Trade Execution Data ---
[JsonPropertyName("actualEntryPrice")]
public decimal? ActualEntryPrice { get; set; }
[JsonPropertyName("positionSize")]
public decimal? PositionSize { get; set; }
[JsonPropertyName("leverageUsed")]
public decimal? LeverageUsed { get; set; }
[JsonPropertyName("entryFee")]
public decimal? EntryFee { get; set; }
[JsonPropertyName("exitFee")]
public decimal? ExitFee { get; set; }
[JsonPropertyName("executionTimestamp")]
public DateTime? ExecutionTimestamp { get; set; }
[JsonPropertyName("quantity")]
public decimal? Quantity { get; set; }
[JsonPropertyName("knockoutThreshold")]
public decimal? KnockoutThreshold { get; set; }
[JsonPropertyName("isRecurring")]
public bool IsRecurring { get; set; } = false;
[JsonPropertyName("currentPrice")]
public decimal? CurrentPrice { get; set; }
[JsonPropertyName("pnlAbsolute")]
public decimal? PnlAbsolute { get; set; }
[JsonPropertyName("pnlPercent")]
public decimal? PnlPercent { get; set; }
[JsonPropertyName("createdAt")]
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}