using System.ComponentModel.DataAnnotations;
namespace Fitness_core_BE.DTOs.CustomerPlan
{
public class UpdateCustomerPlanRequest
{
[Required]
public Guid CustomerPlanId { get; set; }
public string? PlanName { get; set; }
public string? PlanDescription { get; set; }
[Range(0, double.MaxValue, ErrorMessage = "Plan price must be a positive value")]
public decimal? PlanPrice { get; set; }
public bool? HasOnboardingFee { get; set; }
[Range(0, double.MaxValue, ErrorMessage = "Onboarding fee must be zero or greater")]
public decimal? OnboardingFeeAmount { get; set; }
[Range(1, int.MaxValue, ErrorMessage = "Duration must be at least 1 day")]
public int? DurationInDays { get; set; }
public string? PlanScope { get; set; }
public int? MemberLimit { get; set; }
public string? DurationMode { get; set; }
public DateTime? ValidFrom { get; set; }
public DateTime? ValidTo { get; set; }
public bool? AllowSplitPayments { get; set; }
public int? InstallmentCount { get; set; }
[Range(1, int.MaxValue, ErrorMessage = "SessionsPerCycle must be at least 1 when set")]
public int? SessionsPerCycle { get; set; }
public string? SessionRolloverPolicy { get; set; }
[Range(0, int.MaxValue, ErrorMessage = "RolloverGraceDays must be zero or greater")]
public int? RolloverGraceDays { get; set; }
public string? BillingTiming { get; set; }
public bool? IsActive { get; set; }
/// Replaces this plan's place set when provided (empty array clears it back
/// to unrestricted). Omit/null to leave the plan's places unchanged.
public List? PlaceIds { get; set; }
}
}