namespace Common.Configuration.ContentBlocker;

public sealed record ContentBlockerConfig : IConfig
{
    public const string SectionName = "ContentBlocker";
    
    public required bool Enabled { get; init; }
    
    public PatternConfig? Blacklist { get; init; }
    
    public PatternConfig? Whitelist { get; init; }

    public void Validate()
    {
        if (!Enabled)
        {
            return;
        }

        if (Blacklist is null && Whitelist is null)
        {
            throw new Exception("content blocker is enabled, but both blacklist and whitelist are missing");
        }

        if (Blacklist?.Enabled is true && Whitelist?.Enabled is true)
        {
            throw new Exception("only one exclusion (blacklist/whitelist) list is allowed");
        }

        if (Blacklist?.Enabled is true && string.IsNullOrEmpty(Blacklist.Path))
        {
            throw new Exception("blacklist path is required");
        }
        
        if (Whitelist?.Enabled is true && string.IsNullOrEmpty(Whitelist.Path))
        {
            throw new Exception("blacklist path is required");
        }
    }
}