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;
}