summaryrefslogtreecommitdiff
path: root/RhSolutions.QueryModifiers/PipeQueryModifier.cs
blob: 2126c55cf7d636849cb0aeb2b7fba28477a8f363 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;

namespace RhSolutions.QueryModifiers;

public class PipeQueryModifier : IProductQueryModifier
{
    protected virtual string diameterPattern { get; } = @"([\b\D]|^)(?<Diameter>16|20|25|32|40|50|63)([\b\D]|$)";
    protected virtual string typePattern { get; } = @"бухт|отр|штанг";
    protected virtual string pipeName { get; } = "Flex";
    protected virtual Dictionary<string, string> diameterNames { get; } = new()
    {
        ["16"] = "16x2,2",
        ["20"] = "20x2,8",
        ["25"] = "25x3,5",
        ["32"] = "32x4,4",
        ["40"] = "40x5,5",
        ["50"] = "50x6,9",
        ["63"] = "63x8,6"
    };

    protected virtual Dictionary<string, string> makeUpNames { get; } = new()
    {
        ["бухт"] = "бухта",
        ["штанг"] = "прям.отрезки",
        ["отр"] = "прям.отрезки"
    };

    public bool TryQueryModify(IQueryCollection collection, out QueryString queryString)
    {
        queryString = QueryString.Empty;
        string query = collection["query"].ToString();
        if (string.IsNullOrEmpty(query))
        {
            return false;
        }

        var diameterMatches = Regex.Matches(query, diameterPattern);
        if (diameterMatches.Count == 0)
        {
            return false;
        }

        var typeMatches = Regex.Matches(query, typePattern);
        var diameter = diameterMatches.First().Groups["Diameter"].Value;
        string? type = typeMatches.FirstOrDefault()?.Value;

        string result =
            $"Труба {pipeName} {diameterNames[diameter]} {(type != null ? makeUpNames[type] : int.Parse(diameter) < 32 ? makeUpNames["бухт"] : makeUpNames["отр"])}";

        QueryBuilder qb = new()
        {
            { "query", result }
        };
        queryString = qb.ToQueryString();
        return true;
    }
}