use crate::common::{Priority, Tag};

pub enum CaseSensitivity {
    CaseSensitive,
    CaseInsensitive,
    CommandDependent,
}

pub enum Filter {
    Not(Box<Filter>),
    And(Box<Filter>, Box<Filter>),

    EqTag(Tag, String, CaseSensitivity),
    Contains(Tag, String, CaseSensitivity),
    StartsWith(Tag, String, CaseSensitivity),
    PerlRegex(Tag, String),
    NegPerlRegex(Tag, String),
    EqUri(String),
    Base(String),
    ModifiedSince(u64),
    AudioFormatEq {
        sample_rate: u32,
        bits: u8,
        channels: u8,
    },
    AudioFormatEqMask {
        sample_rate: Option<u32>,
        bits: Option<u8>,
        channels: Option<u8>,
    },
    PrioCmp(Priority),
}