using uCalcSoftware;

var uc = new uCalc();
var FruitsXML =
"""

<Fruits>
  <Fruit CommonName='Apple' ScientificName='Malus domestica' />
  <Fruit CommonName='Banana' ScientificName='Musa acuminata' />
  <Fruit CommonName='Orange' ScientificName='Citrus × sinensis' />
  <Fruit CommonName='Grapes' ScientificName='Vitis vinifera' />
</Fruits>

""";

var t = new uCalc.Transformer();
var fruitsTagRule = t.FromTo("<Fruits>", "List of fruits");
var fruitRule = t.FromTo("CommonName={@string:name}", "- {name}");

Console.WriteLine("--- Using Maximum (Rule-Level) ---");
fruitRule.Maximum = 3; // Rule fails if more than 3 fruits are found.
t.Filter(FruitsXML);
Console.WriteLine($"Match count when fruit rule fails: {t.Matches.Count()}"); // The 'fruitsTagRule' still matches.
Console.WriteLine(t.Matches.Text);

Console.WriteLine("");
Console.WriteLine("--- Using GlobalMaximum (Transformer-Level) ---");
fruitRule.Maximum = -1; // Reset local maximum
fruitRule.GlobalMaximum = 3; // Transformer fails if more than 3 fruits are found.
t.Filter(FruitsXML);
Console.WriteLine($"Match count when global rule fails: {t.Matches.Count()}"); // All matches are invalidated.
Console.WriteLine(t.Matches.Text);