using System;
using System.Collections.Generic;
using System.Diagnostics.Metrics;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace Library13RegularExpressions
{
	internal class RegularClass
	{
		/// <summary>
		/// Почтовый индекс
		/// </summary>
		/// <param name="data"></param>
        public static void CheckPostalCode(string data)
        {
            //Создание регулярного выражения
            Regex reg = new Regex(@"^\d{6}$");
            //Проверка на совпадение строки шаблону
            bool check = reg.IsMatch(data);
            Console.WriteLine(check ? "Индекс верный" : "Индекс неверный");
        }

        /// <summary>
        /// Проверка серии и номера паспорта
        /// </summary>
        /// <param name="data"></param>
        public static void CheckPassport(string data)
        {
            Regex reg = new Regex(@"^\d{4} \d{6}$");
            bool check = reg.IsMatch(data);
            Console.WriteLine(check ? "Номер паспорта верный" : "Номер паспорта неверный");
        }

        /// <summary>
        /// Проверка номера телефона
        /// </summary>
        /// <param name="data"></param>
        public static void CheckTelephone(string data)
        {
            Regex reg = new Regex(@"^(\+7||8)9\d{9}$");
            bool check = reg.IsMatch(data);
            Console.WriteLine(check ? "Номер телефона верный" : "Номер телефона неверный");
        }

        /// <summary>
        /// Проверка формата времени
        /// </summary>
        /// <param name="data"></param>
        public static void CheckTime(string data) {
			//00-19 или 20-23
			Regex reg = new Regex(@"^([01]?[0-9]|2[0-3]):[0 - 5][0 - 9]$");
			bool check = reg.IsMatch(data);
            Console.WriteLine(check ? "Формат времени верный" : "Формат времени неверный");
        }

        /// <summary>
        /// Проверка пароля на соответствие шаблону
        /// </summary>
        /// <param name="data"></param>
        public static void CheckPassword(string data)
        {
            Regex reg1 = new Regex(@"(?=(.*[A-Z]){1,})");
            if (reg1.IsMatch(data))
            {
                Regex reg2 = new Regex(@"(?=(.*[a-z]){3,})");
                if (reg2.IsMatch(data))
                {
                    Regex reg3 = new Regex(@"(?=(.*\d){2,})");
                    Regex reg4 = new Regex(@"(?=(.*[^\s\w]){1,})");
                    if (reg3.IsMatch(data) && reg4.IsMatch(data))
                    {
                        Regex reg5 = new Regex(@"(?=.{8,})");
                        if (reg5.IsMatch(data))
                        {
                            Console.WriteLine("Пароль подходит");
                        }
                        else
                        {
                            Console.WriteLine("Пароль должен быть длинее 8 символов");
                        }
                    }
                    else
                    {
                        Console.WriteLine("В строке должно быть не менее 2 цифры и не менее 1 спец. символа");
                    }
                }
                else
                {
                    Console.WriteLine("В строке должно быть минимум 3 строчных латинских символа");
                }
            }
            else
            {
                Console.WriteLine("В строке должна быть минимум 1 заглавная латинская буква");
            }    
        }
    }
}
