/*
 * File: D:\shadowed-realms-mobile\ShadowedRealmsMobile\src\server\ShadowedRealms.Shared\DTOs\Player\CombatPreparationRequestDto.cs
 * Created: 2025-10-23
 * Last Modified: 2025-10-23
 * Description: Request DTO for player combat preparation operations
 * Last Edit Notes: Individual file implementation for combat preparation with dragon integration and field interception support
 */

using System.ComponentModel.DataAnnotations;

namespace ShadowedRealms.Shared.DTOs.Player
{
    /// <summary>
    /// Request DTO for player combat preparation operations
    /// </summary>
    public class CombatPreparationRequestDto
    {
        /// <summary>
        /// Type of combat being prepared for (attack, defense, march, intercept)
        /// </summary>
        [Required]
        [StringLength(50)]
        public string CombatType { get; set; } = string.Empty;

        /// <summary>
        /// Target player or location for combat
        /// </summary>
        [StringLength(100)]
        public string? Target { get; set; }

        /// <summary>
        /// Army composition for combat
        /// </summary>
        public Dictionary<string, int> ArmyComposition { get; set; } = new();

        /// <summary>
        /// Dragon to include in combat
        /// </summary>
        [StringLength(100)]
        public string? DragonId { get; set; }

        /// <summary>
        /// Equipment to be used in combat
        /// </summary>
        public List<string> Equipment { get; set; } = new();

        /// <summary>
        /// Combat buffs to apply
        /// </summary>
        public List<string> CombatBuffs { get; set; } = new();

        /// <summary>
        /// Whether to include field interception calculations
        /// </summary>
        public bool IncludeInterceptionCalculations { get; set; } = false;

        /// <summary>
        /// March speed preferences
        /// </summary>
        [Range(1, 10)]
        public int SpeedSetting { get; set; } = 5;

        /// <summary>
        /// Whether to validate resource costs
        /// </summary>
        public bool ValidateResourceCosts { get; set; } = true;

        /// <summary>
        /// Additional preparation parameters
        /// </summary>
        public Dictionary<string, object>? PreparationParameters { get; set; }
    }
}