public static ISqlFilter SqlIntFilter(UserFilterProviderColumn columnFilter)
        {
            string column      = "counter";
            int?   filterValue = null;

            while (!filterValue.HasValue)
            {
                Console.WriteLine(" Inserisci il counter:");
                var str = Console.ReadLine();
                if (int.TryParse(str, out var value))
                {
                    filterValue = value;
                }
            }

            IntFilterMode?mode = null; //non è più un enum ma un oggetto che ha un enum ma che può essere nullo

            while (mode == null)
            {
                Console.WriteLine("1. minore");
                Console.WriteLine("2. uguale");
                Console.WriteLine("3. maggiore");
                var key = Console.ReadKey();
                switch (key.KeyChar)
                {
                case '1':
                    mode = IntFilterMode.Minor;
                    break;

                case '2':
                    mode = IntFilterMode.Equal;
                    break;

                case '3':
                    mode = IntFilterMode.Major;
                    break;
                }
            }

            var filter = new IntFilter(column, filterValue.Value, mode.Value);

            return(filter);
        }
        public static ISqlFilter SqlDateTimeFilter(UserFilterProviderColumn columnFilter)
        {
            string   column      = "timestamp";
            DateTime?filterValue = null;

            while (!filterValue.HasValue)
            {
                Console.WriteLine(" Inserisci la data in formato standard:");
                var str = Console.ReadLine();
                if (DateTime.TryParse(str, out var value))
                {
                    filterValue = value;
                }
            }
            DateTimeFilterMode?mode = null; //non è più un enum ma un oggetto che ha un enum ma che può essere nullo

            while (mode == null)
            {
                Console.WriteLine("1. prima");
                Console.WriteLine("2. ora esatta");
                Console.WriteLine("3. dopo");
                var key = Console.ReadKey();
                switch (key.KeyChar)
                {
                case '1':
                    mode = DateTimeFilterMode.Before;
                    break;

                case '2':
                    mode = DateTimeFilterMode.At;
                    break;

                case '3':
                    mode = DateTimeFilterMode.After;
                    break;
                }
            }

            var filter = new DateTimeFilter(column, filterValue.Value, mode.Value);

            return(filter);
        }
        public static ISqlFilter SqlTextStringFilter(UserFilterProviderColumn columnFilter)
        {
            string column;

            switch (columnFilter)
            {
            case UserFilterProviderColumn.Email:
                Console.WriteLine(" Inserisci l'email o parte di essa:");
                column = "email";
                break;

            case UserFilterProviderColumn.Phone:
                Console.WriteLine(" Inserisci il telefono o parte di esso:");
                column = "phone";
                break;

            case UserFilterProviderColumn.Name:
                Console.WriteLine(" Inserisci il nome o parte di esso:");
                column = "name";
                break;

            case UserFilterProviderColumn.Notes:
                Console.WriteLine(" Inserisci le note o parte di esse:");
                column = "notes";
                break;

            default: throw new Exception();
            }


            var filterValue           = Console.ReadLine();
            StringTextFilterMode?mode = null; //non è più un enum ma un oggetto che ha un enum ma che può essere nullo

            while (mode == null)
            {
                Console.WriteLine("1. Contains");
                Console.WriteLine("2. Starts");
                Console.WriteLine("3. End");
                Console.WriteLine("4. Match esatto");
                var key = Console.ReadKey();
                switch (key.KeyChar)
                {
                case '1':
                    mode = StringTextFilterMode.Contains;
                    break;

                case '2':
                    mode = StringTextFilterMode.Starts;
                    break;

                case '3':
                    mode = StringTextFilterMode.Ends;
                    break;

                case '4':
                    mode = StringTextFilterMode.Equal;
                    break;
                }
            }

            var filter = new StringTextFilter(column, filterValue.Trim(), mode.Value);

            return(filter);
        }