namespace BankSampahApp.Services;
/// 
/// Interface untuk centralized configuration management
/// 
public interface IAppConfigurationService
{
    /// 
    /// Gets application configuration with fallback
    /// 
    /// Type of configuration value
    /// Configuration key
    /// Default value if key not found
    /// Configuration value or default
    T GetValue(string key, T defaultValue);
    /// 
    /// Gets application name from configuration
    /// 
    string ApplicationName { get; }
    /// 
    /// Gets whether detailed exceptions should be shown
    /// 
    bool ShowDetailedExceptions { get; }
    /// 
    /// Gets cache configuration settings
    /// 
    CacheSettings CacheSettings { get; }
    /// 
    /// Gets statistics configuration settings
    /// 
    StatisticsSettings StatisticsSettings { get; }
    /// 
    /// Gets development configuration settings
    /// 
    DevelopmentSettings DevelopmentSettings { get; }
}
/// 
/// Cache configuration settings
/// 
public class CacheSettings
{
    public TimeSpan FeaturesExpiration { get; set; } = TimeSpan.FromHours(1);
    public TimeSpan StatisticsExpiration { get; set; } = TimeSpan.FromMinutes(30);
    public TimeSpan StatisticsSlidingExpiration { get; set; } = TimeSpan.FromMinutes(5);
    public TimeSpan PrivacyPageExpiration { get; set; } = TimeSpan.FromHours(1);
}
/// 
/// Statistics configuration settings
/// 
public class StatisticsSettings
{
    public int BaseUsers { get; set; } = 1000;
    public decimal BaseWaste { get; set; } = 15.0m;
    public int BaseRewards { get; set; } = 890;
    public decimal BaseEnvironmentImpact { get; set; } = 95.0m;
    public double GrowthFactorMultiplier { get; set; } = 0.001;
    public double MaxGrowthFactor { get; set; } = 1.5;
}
/// 
/// Development configuration settings
/// 
public class DevelopmentSettings
{
    public bool DetailedExceptions { get; set; } = false;
    public bool EnablePerformanceMetrics { get; set; } = false;
    public int SimulatedDelayMs { get; set; } = 0;
}