public async Task <Pedido> RealizarPedido(PedidoDTO pedidoDto)
        {
            //var longlat = $"POINT({pedidoDto.Latitude} {pedidoDto.Longitude})".Replace(",", ".");
            try
            {
                var pedido = new Pedido();
                pedido.Id       = Guid.NewGuid();
                pedido.DataHora = DateTime.Now;
                //pedido.LatLong = DbGeography.FromText(longlat);
                pedido.Latitude     = pedidoDto.Latitude;
                pedido.Longitude    = pedidoDto.Longitude;
                pedido.Peso         = pedidoDto.Peso;
                pedido.StatusPedido = StatusPedido.aguardandoAprovacao;

                //using (var trans = new TransactionScope())
                //{
                //Verificar a distância entre Origem e Destindo (Pedido)
                var distance = new Coordinates(latitude, longitude)
                               .DistanceTo(
                    new Coordinates(pedido.Latitude, pedido.Longitude),
                    UnitOfLength.Kilometers
                    );
                var drones = await _droneRepository.GetDisponiveis();

                //Verificar drones, que possuem autonomia de ida e volta

                //Qual automomia atual do drone = (Autonomia * Carga) / 100
                //Temos que pegar os Drones com AA >= Distancia do Pedido * 2
                var dronesDispAutonomia = drones?.Where(x => (((x.Autonomia * x.Carga) / 100) * x.Velocidade) >= (distance * 2))?.ToList();

                //Dos Drones com autonomia, quais podem carregar o peso do pedido
                var dronesComCapacidade = dronesDispAutonomia?.Where(x => x.Capacidade >= pedido.Peso)?.ToList();

                //Caso dronesComCapacidade não seja nulo e contenha objetos (drone), pode ser responsável pela entrega
                if (dronesComCapacidade != null && dronesComCapacidade.Count() > 0)
                {
                    var drone = dronesComCapacidade.FirstOrDefault();
                    pedido.Drone        = drone;
                    pedido.StatusPedido = StatusPedido.despachado;
                    drone.StatusDrone   = StatusDrone.emTrajeto;
                    await _pedidoRepository.AddPedido(pedido);

                    await _droneRepository.UpdateDrone(drone);
                }
                else
                {
                    pedido.StatusPedido = StatusPedido.reprovado;
                    await _pedidoRepository.AddPedido(pedido);
                }
                //trans.Complete();
                return(pedido);
                //}
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task EnviarPedidos()
        {
            try
            {
                List <Pedido> listaPedidos = await _pedidoRepository.ListarPedidos();

                List <Drone> drones = await _droneRepository.GetDisponiveis();

                foreach (Drone drone in drones)
                {
                    double droneAutonomia  = drone.Autonomia;
                    int    droneCapacidade = drone.Capacidade;

                    foreach (Pedido pedido in listaPedidos)
                    {
                        if (droneAutonomia >= pedido.DistanciaParaDestino && droneCapacidade >= pedido.Peso)
                        {
                            drone.StatusDrone   = StatusDrone.emTrajeto;
                            pedido.StatusPedido = StatusPedido.despachado;
                            await _pedidoRepository.AddPedidoDrone(new PedidoDrone { Drone = drone, Pedido = pedido });

                            await _pedidoRepository.UpdatePedido(pedido);

                            await _droneRepository.UpdateDrone(drone);

                            droneAutonomia  -= pedido.DistanciaParaDestino;
                            droneCapacidade -= pedido.Peso;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }