/*
 * File: D:\shadowed-realms-mobile\ShadowedRealmsMobile\src\server\ShadowedRealms.Shared\DTOs\Purchase\SkillAlternativesRequestDto.cs
 * Created: 2025-10-23
 * Last Modified: 2025-10-23
 * Description: Request DTO for skill-based alternatives to premium purchases
 * Last Edit Notes: Individual file implementation for anti-pay-to-win skill alternatives with achievement-based rewards
 */

using System.ComponentModel.DataAnnotations;

namespace ShadowedRealms.Shared.DTOs.Purchase
{
    /// <summary>
    /// Request DTO for skill-based alternatives to premium purchases
    /// </summary>
    public class SkillAlternativesRequestDto
    {
        /// <summary>
        /// Premium item or benefit player wants skill alternative for
        /// </summary>
        [Required]
        [StringLength(100)]
        public string PremiumItemId { get; set; } = string.Empty;

        /// <summary>
        /// Category of premium benefit (combat, economic, convenience, cosmetic)
        /// </summary>
        [Required]
        [StringLength(50)]
        public string BenefitCategory { get; set; } = string.Empty;

        /// <summary>
        /// Player's current skill level in relevant category
        /// </summary>
        [Range(1, 100)]
        public int CurrentSkillLevel { get; set; } = 1;

        /// <summary>
        /// Desired effectiveness percentage (max 70% for F2P balance)
        /// </summary>
        [Range(1, 70)]
        public int DesiredEffectiveness { get; set; } = 50;

        /// <summary>
        /// Time player is willing to invest (hours per day)
        /// </summary>
        [Range(0.5, 24.0)]
        public double TimeCommitment { get; set; } = 2.0;

        /// <summary>
        /// Player's preferred skill challenge types
        /// </summary>
        public List<string> PreferredChallenges { get; set; } = new();

        /// <summary>
        /// Whether to include alliance-based skill alternatives
        /// </summary>
        public bool IncludeAllianceAlternatives { get; set; } = true;

        /// <summary>
        /// Whether to include kingdom event alternatives
        /// </summary>
        public bool IncludeKingdomEventAlternatives { get; set; } = true;

        /// <summary>
        /// Additional skill alternative parameters
        /// </summary>
        public Dictionary<string, object>? AlternativeParameters { get; set; }
    }
}