using System.Text.RegularExpressions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Extensions; namespace RhSolutions.QueryModifiers { public class ElbowModifier : IProductQueryModifier { private string diameterPattern { get; } = @"([\b\D]|^)(?16|20|25|32|40|50|63)([\b\D]|$)"; private string anglePattern { get; } = @"([\b\D]|^)(?45|90)([\b\D]|$)"; protected virtual string name {get;} = "Угольник RAUTITAN -PLATINUM"; public bool TryQueryModify(IQueryCollection collection, out QueryString queryString) { queryString = QueryString.Empty; var query = collection["query"].ToString(); if (string.IsNullOrEmpty(query)) { return false; } var diameter = Regex.Match(query, diameterPattern); if (diameter.Success) { var angle = Regex.Match(query, anglePattern); QueryBuilder qb = new() { {"query", CreateName(angle, diameter)} }; queryString = qb.ToQueryString(); return true; } else { return false; } } protected virtual string CreateName(Match angle, Match diameter) { return $"{name} {(angle.Success ? angle.Groups["Angle"].Captures.First() : 90)} {diameter.Groups["Diameter"].Captures.First()}"; } } public class BendFormerHeating : ElbowModifier { protected override string name => "Фиксатор поворота без колец"; protected override string CreateName(Match angle, Match diameter) { return $"{name} {(diameter.Groups["Diameter"].Captures.First().ToString() == "16" ? "16/17" : diameter.Groups["Diameter"].Captures.First())}/{(angle.Success ? angle.Groups["Angle"].Captures.First() : 90)}°"; } } }