public void ConnectToATS(ATS ats)
 {
     ats.OnConnecting += this.IsDebtor;
     ats.OnTerminateCall += this.AddCall;
 }
        static void Main(string[] args)
        {
            var logger = new ConsoleLogger();
            var tariffPlans = new List<ITariffPlan> { new FavoriteNumbersTariffPlan(), new FreeMinutesTariffPlan()};
            var billingSystem = new BillingSystem("+37529", 100100100, logger, tariffPlans);
            var atsStation = new ATS(new List<IPort>()
            { new Port(logger), new Port(logger), new Port(logger), new Port(logger)}, logger);

            billingSystem.ConnectToATS(atsStation);
            atsStation.ConnectToBillingSystem(billingSystem);

            LocalDateTime.OnDayChanged += billingSystem.DayChanged;

            var User1 = billingSystem.ConcludeContract(new FreeMinutesTariffPlan());
            User1.Plug();
            var User2 = billingSystem.ConcludeContract(new FavoriteNumbersTariffPlan(new[] { User1.Number }));
            User2.Plug();
            var User3 = billingSystem.ConcludeContract(new FreeMinutesTariffPlan());
            User3.Plug();
            var User4 = billingSystem.ConcludeContract(new FreeMinutesTariffPlan());
            User4.Plug();

            logger.WriteToLog("\n---Connection when two ports are free---");
            User1.SendRequest(User2.Number);
            User2.Answer();
            User2.TerminateConnection();

            logger.WriteToLog("\n---Try to call with unplug terminal");
            User3.UnPlug();
            User3.SendRequest(User2.Number);

            logger.WriteToLog("\n---Try to call to busy terminal");
            User3.Plug();
            User3.SendRequest(User2.Number);
            logger.WriteToLog("---\n");
            User4.SendRequest(User3.Number);
            logger.WriteToLog("---\n");
            User3.Drop();

            logger.WriteToLog("\n---Try to call to unplug terminal");
            User2.UnPlug();
            User1.SendRequest(User2.Number);

            User1.SendRequest(User3.Number);
            User3.Answer();
            User3.TerminateConnection();

            User1.SendRequest(User2.Number);
            User2.Answer();
            User2.TerminateConnection();

            User1.SendRequest(User4.Number);
            User4.Answer();
            User4.TerminateConnection();

            logger.WriteToLog("\n---Get debt of user with number " + User1.Number);
            var debt = billingSystem.GetDebtOnCurrentMoment(User1.Number);
            logger.WriteToLog(debt.ToString());

            logger.WriteToLog("\n---Try to call without money");
            User2.Plug();

            var dateOfContract = billingSystem.GetContracts.SingleOrDefault(x => x.Number == User1.Number);

            while(true)
            {
                var time = LocalDateTime.Now;
                if (time.Day >= dateOfContract.Date.Day && time.Month == dateOfContract.Date.AddMonths(2).Month)
                {
                   break;
                }
            }
            User1.SendRequest(User2.Number);
            logger.WriteToLog("\n---Pay and try to call again");
            billingSystem.Pay(User1.Number);
            User1.SendRequest(User2.Number);
            User2.Answer();
            User2.TerminateConnection();

            logger.WriteToLog("\n---Change tariff plan");
            billingSystem.ChangeTariffPlan(User2.Number, new FreeMinutesTariffPlan());
            logger.WriteToLog("---and one more time");
            billingSystem.ChangeTariffPlan(User2.Number, new FreeMinutesTariffPlan());

            logger.WriteToLog("\n---Get outgoing call from  " + User1.Number);
            var info = billingSystem.GetInfoAboutCalls((x) => { return x.Source == User1.Number; });
            foreach(var call in info)
            {
                logger.WriteToLog(ObjectToLogString.ToLogString(call));
            }
        }