/*
 * File: D:\shadowed-realms-mobile\ShadowedRealmsMobile\src\server\ShadowedRealms.Shared\DTOs\Combat\BattlePredictionRequestDto.cs
 * Created: 2025-10-23
 * Last Modified: 2025-10-23
 * Description: Request DTO for battle outcome predictions
 * Last Edit Notes: Individual file implementation for battle prediction input validation
 */

using System.ComponentModel.DataAnnotations;

namespace ShadowedRealms.Shared.DTOs.Combat
{
    /// <summary>
    /// Request DTO for battle outcome predictions
    /// </summary>
    public class BattlePredictionRequestDto
    {
        /// <summary>
        /// Attacking player ID
        /// </summary>
        [Required]
        [Range(1, int.MaxValue)]
        public int AttackerId { get; set; }

        /// <summary>
        /// Defending player ID
        /// </summary>
        [Required]
        [Range(1, int.MaxValue)]
        public int DefenderId { get; set; }

        /// <summary>
        /// Proposed attacking army composition
        /// </summary>
        [Required]
        public Dictionary<string, long> AttackingArmy { get; set; } = new();

        /// <summary>
        /// Known or estimated defending army composition
        /// </summary>
        [Required]
        public Dictionary<string, long> DefendingArmy { get; set; } = new();

        /// <summary>
        /// Battle type for prediction (Field, Castle, Siege, Interception)
        /// </summary>
        [Required]
        [StringLength(50)]
        public string BattleType { get; set; } = string.Empty;

        /// <summary>
        /// Whether attacker will include dragon
        /// </summary>
        public bool AttackerIncludesDragon { get; set; } = false;

        /// <summary>
        /// Whether defender will include dragon
        /// </summary>
        public bool DefenderIncludesDragon { get; set; } = false;

        /// <summary>
        /// Terrain type where battle will occur
        /// </summary>
        [StringLength(50)]
        public string TerrainType { get; set; } = "Normal";

        /// <summary>
        /// Weather conditions affecting battle
        /// </summary>
        [StringLength(50)]
        public string WeatherConditions { get; set; } = "Clear";

        /// <summary>
        /// Whether this is a field interception scenario
        /// </summary>
        public bool IsFieldInterception { get; set; } = false;

        /// <summary>
        /// Prediction detail level (Basic, Detailed, Comprehensive)
        /// </summary>
        [StringLength(50)]
        public string DetailLevel { get; set; } = "Detailed";

        /// <summary>
        /// Additional prediction parameters
        /// </summary>
        public Dictionary<string, object> PredictionParameters { get; set; } = new();
    }
}