/**
   * Request to have system determine ideal parking lot based on preferences
   *
   * @param request Parking lot preferences
   * @return Selected parking lot, or null if operation failed (or no lots found)
   */
  private SelectedParkingLot findParkingLot(ParkingRequest request) {
    // FOR DEBUGGING PURPOSES ONLY!
    System.out.println("Preference data retrieved:");
    System.out.println("  Destination:  " + request.getDestination());
    System.out.println("  Optimization:  " + request.getOptimization());
    System.out.println("  Outside OK:  " + request.getOutsideParking());
    System.out.println("  Handicap Needed:  " + request.getHandicapRequired());
    System.out.println("  Electric Needed:  " + request.getElectricRequired());

    // Compute recommended parking lot
    Resources res = getResources();
    Algorithm algorithm = Algorithm.getInstance();
    List<Lot> sortedLots = algorithm.computeRecommendedLots(request);
    if (sortedLots.size() == 0) {
      // No lots were found
      return null;
    } else {
      String reason = res.getString(R.string.LOT_REASON_DIST);
      if (Session.getCurrentUser().getDistORprice() > 50) {
        reason = res.getString(R.string.LOT_REASON_COST);
      }

      return new SelectedParkingLot(sortedLots.get(0).getName(), reason, request.getDestination());
    }
  }
  /**
   * Called when user presses the Find Parking button
   *
   * @param view Current view
   */
  public void findParking(View view) {
    //
    // Step 1:  Retrieve inputs from activity
    //

    // Read destination spinner
    String destination = whereToSpinner_.getSelectedItem().toString();

    // Get optimization preference value
    int disORprice = Session.getCurrentUser().getDistORprice();

    // Get outdoor preference
    boolean outsideAllowed = Session.getCurrentUser().isCovered();

    // Get disabled parking value
    boolean disableParkNeeded = Session.getCurrentUser().isHandicap();

    // Get electric car value
    boolean electricParkNeeded = Session.getCurrentUser().isElectric();

    // Package up parking request
    ParkingRequest request =
        new ParkingRequest(
            destination, disORprice, outsideAllowed, disableParkNeeded, electricParkNeeded);

    //
    // Step 2:  Have algorithm determine desired parking lot
    //
    SelectedParkingLot selectedLot = findParkingLot(request);

    // At this point, it is possible that selectedLot is null.  This will be checked as
    // part of the RecommendParkingActivity.
    // Prepare activity showing selected parking lot and reason (pass selectedLot data)
    // Pass preference data to the recommend parking activity and start activity
    Intent intent = new Intent(this, RecommendParkingActivity.class);
    intent.putExtra(RecommendParkingActivity.PREFERENCES_INTENT_DATA, selectedLot);
    startActivity(intent);
  }