using BpsRwApp.Models;
namespace BpsRwApp.Services;
/// 
/// Interface untuk common validation logic
/// 
public interface IValidationService
{
    /// 
    /// Validates statistics model
    /// 
    /// Statistics to validate
    /// Validation result
    ValidationResult ValidateStatistics(StatisticsModel statistics);
    /// 
    /// Validates feature model
    /// 
    /// Feature to validate
    /// Validation result
    ValidationResult ValidateFeature(FeatureModel feature);
    /// 
    /// Validates date range
    /// 
    /// Start date
    /// End date
    /// Validation result
    ValidationResult ValidateDateRange(DateTime startDate, DateTime endDate);
    /// 
    /// Validates required string fields
    /// 
    /// String value to validate
    /// Name of the field
    /// Maximum length allowed
    /// Validation result
    ValidationResult ValidateRequiredString(string? value, string fieldName, int maxLength = int.MaxValue);
    /// 
    /// Validates numeric range
    /// 
    /// Numeric value to validate
    /// Name of the field
    /// Minimum allowed value
    /// Maximum allowed value
    /// Validation result
    ValidationResult ValidateNumericRange(decimal value, string fieldName, decimal minValue = 0, decimal maxValue = decimal.MaxValue);
}
/// 
/// Result of validation operation
/// 
public class ValidationResult
{
    public bool IsValid { get; set; }
    public List Errors { get; set; } = new();
    public static ValidationResult Success() => new() { IsValid = true };
    public static ValidationResult Failure(string error) => new()
    {
        IsValid = false,
        Errors = new List { error }
    };
    public static ValidationResult Failure(IEnumerable errors) => new()
    {
        IsValid = false,
        Errors = errors.ToList()
    };
}