/*
 * File: D:\shadowed-realms-mobile\ShadowedRealmsMobile\src\server\ShadowedRealms.Shared\DTOs\Combat\RouteOptimizationRequestDto.cs
 * Created: 2025-10-23
 * Last Modified: 2025-10-23
 * Description: Request DTO for route optimization and pathfinding
 * Last Edit Notes: Individual file implementation for route optimization input
 */

using System.ComponentModel.DataAnnotations;

namespace ShadowedRealms.Shared.DTOs.Combat
{
    /// <summary>
    /// Request DTO for route optimization and pathfinding
    /// </summary>
    public class RouteOptimizationRequestDto
    {
        /// <summary>
        /// Starting coordinates for route calculation
        /// </summary>
        [Required]
        public Dictionary<string, decimal> StartCoordinates { get; set; } = new();

        /// <summary>
        /// Destination coordinates for route calculation
        /// </summary>
        [Required]
        public Dictionary<string, decimal> DestinationCoordinates { get; set; } = new();

        /// <summary>
        /// Army composition affecting movement speed
        /// </summary>
        [Required]
        public Dictionary<string, long> ArmyComposition { get; set; } = new();

        /// <summary>
        /// Route optimization priority (Speed, Stealth, Safety, Cost)
        /// </summary>
        [Required]
        [StringLength(50)]
        public string OptimizationPriority { get; set; } = "Speed";

        /// <summary>
        /// Whether to include stealth route options
        /// </summary>
        public bool IncludeStealthRoutes { get; set; } = true;

        /// <summary>
        /// Maximum acceptable route distance multiplier
        /// </summary>
        [Range(1.0, 3.0)]
        public decimal MaxDistanceMultiplier { get; set; } = 1.5m;

        /// <summary>
        /// Whether to avoid forest barriers if possible
        /// </summary>
        public bool AvoidForestBarriers { get; set; } = false;

        /// <summary>
        /// Number of alternative routes to calculate
        /// </summary>
        [Range(1, 5)]
        public int AlternativeRoutesCount { get; set; } = 2;

        /// <summary>
        /// Whether player has premium route planning features
        /// </summary>
        public bool HasPremiumRouting { get; set; } = false;

        /// <summary>
        /// Additional optimization preferences
        /// </summary>
        public Dictionary<string, object> OptimizationPreferences { get; set; } = new();
    }
}