예제 #1
0
        /// <summary>
        /// Creates the platform.
        /// </summary>
        private void CreatePlatform()
        {
            var availableLandingArea = _landingAreaService.GetLandingAreasList();

            if (availableLandingArea.Any())
            {
                var landingAreaName     = ConsoleHelpers.ReadConsole("Enter the LandingZone name");
                var selectedLandingArea = availableLandingArea.FirstOrDefault(x => x.Description == landingAreaName);

                if (selectedLandingArea != null)
                {
                    var platformDescription    = ConsoleHelpers.ReadConsole("Enter the Platform description");
                    var platformAreaX          = Convert.ToDouble(ConsoleHelpers.ReadConsole("Anter Area X"));
                    var platformAreaY          = Convert.ToDouble(ConsoleHelpers.ReadConsole("Enter Area Y"));
                    var platformMinRocketSpace = Convert.ToInt32(ConsoleHelpers.ReadConsole("Enter the minimum space between rockets"));

                    var platformConfirm = ConsoleHelpers.ConfirmationPrompt("Are you sure to create this platform?");

                    if (platformConfirm)
                    {
                        var zoneArea     = selectedLandingArea.AreaX * selectedLandingArea.AreaY;
                        var platformArea = platformAreaX * platformAreaY;

                        while (platformArea > zoneArea)
                        {
                            Console.WriteLine($"Invalid Platform area,  should be less than {zoneArea} m2");
                            platformAreaX = long.Parse(ConsoleHelpers.ReadConsole("Enter Area X"));
                            platformAreaY = long.Parse(ConsoleHelpers.ReadConsole("Enter Area Y"));

                            platformArea = platformAreaX * platformAreaY;
                        }

                        bool   availablePosition = false;
                        double landingAreaX      = 0;
                        double landingAreaY      = 0;

                        while (!availablePosition)
                        {
                            landingAreaX = Convert.ToDouble(ConsoleHelpers.ReadConsole("Enter Landing Area X coordinate for the new platform"));
                            landingAreaY = Convert.ToDouble(ConsoleHelpers.ReadConsole("Enter Landing Area Y coordinate for the new platform"));

                            var landingAreaPositions = _positionService.GetRegisteredPositions()
                                                       .FirstOrDefault(x => x.OwnerId == selectedLandingArea.Id);

                            var positionAvailability = landingAreaPositions.Positions.FirstOrDefault(x => x.PositionX == landingAreaX && x.PositionY == landingAreaY);
                            if (positionAvailability != null)
                            {
                                availablePosition = positionAvailability.IsAvailable;
                            }
                            else
                            {
                                ConsoleHelpers.WriteLine("Invalid coordinate,  try again", "alert");
                            }
                        }

                        var createdPlatform = _platformService.CreateLandingPlatform(selectedLandingArea, platformDescription, platformAreaX, platformAreaY, platformMinRocketSpace, landingAreaX, landingAreaY);

                        if (createdPlatform == null)
                        {
                            Console.WriteLine("Error creating the new platform");
                        }
                        Console.WriteLine("Platform created");
                    }
                }
                else
                {
                    Console.WriteLine("No Landing Area found");
                }
            }
            else
            {
                Console.WriteLine("No Landing Areas found");
            }
        }