namespace Nuuru.Server.Services.Search.Tokens;
///
/// Base class for all search tokens produced by the tokenizer.
///
public abstract record SearchToken;
///
/// A regular tag to include in search results.
///
public record TagToken(string Name) : SearchToken;
///
/// A tag to exclude from search results (prefixed with -).
///
public record NegatedTagToken(string Name) : SearchToken;
///
/// A wildcard tag pattern (ending with *).
///
public record WildcardTagToken(string Prefix, bool Negated = false) : SearchToken;
///
/// Start of an OR group ({).
///
public record OrGroupStartToken : SearchToken;
///
/// End of an OR group (}).
///
public record OrGroupEndToken : SearchToken;
///
/// OR separator within a group (~).
///
public record OrSeparatorToken : SearchToken;
///
/// A meta-tag for filtering by post properties (e.g., rating:safe, id:>100).
///
public record MetaTagToken(string Key, MetaOperator Operator, string Value, bool Negated = false) : SearchToken;
///
/// Operators for meta-tag comparisons.
///
public enum MetaOperator
{
/// Exact match (rating:safe)
Equals,
/// Greater than (id:>100)
GreaterThan,
/// Less than (id:<100)
LessThan,
/// Greater than or equal (id:>=100)
GreaterThanOrEqual,
/// Less than or equal (id:<=100)
LessThanOrEqual,
/// Range (id:100..200)
Range
}