public IEnumerable <Target> GetTargets(IEnumerable <EspionageReport> reports)
        {
            var farmsToAttack = reports.Where(m =>
                                              m.Details.HasFlag(ReportDetails.Defense) && (m.DetectedDefence == null || ((PlanetDefences)m.DetectedDefence).TotalValue == 0) &&
                                              m.Details.HasFlag(ReportDetails.Ships) && m.DetectedShips == null)
                                .OrderByDescending(m => m.Resources.TotalWithPriority(ResourcePriority));

            foreach (EspionageReport farm in farmsToAttack)
            {
                if (!AreSlotsAvailable() || !AreCargosAvailable())
                {
                    yield break;
                }


                Target target = new Target()
                {
                    Destination     = farm.Coordinate,
                    Fleet           = FleetComposition.ToPlunder(farm.Resources, Cargo),
                    ExpectedPlunder = FleetComposition.GetPlunder(farm.Resources)
                };

                int ships = target.Fleet.Ships[Cargo];
                if (ships < MinimumCargosToSend)
                {
                    yield break;
                }

                _cargoCount -= ships;
                _slots.Current++;

                yield return(target);
            }
        }