---
# System prepended metadata

title: "\U0001F697 Building Vehicle Search System \U0001F697"

---

# 🚗 Building Vehicle Search System 🚗 

## Objective

Design and implement a Vehicle Search System that allows users to search for vehicles based on specific criteria. The goal is to evaluate your skills in C# development, including object-oriented programming, LINQ, and optimization techniques.

## Skeleton Code

Use the following skeleton code as a starting point for your implementation:

```csharp
using System;
using System.Collections.Generic;
using System.Linq;

namespace VehicleSearchSystem;

public class Vehicle
{
   public string Make { get; set; } // e.g., Toyota, Honda
   public string Model { get; set; } // e.g., Corolla, Civic
   public int Year { get; set; }
   public string Color { get; set; }
   public decimal Price { get; set; }
}

public class VehicleSearchService
{
   private readonly List<Vehicle> _vehicles;

   public VehicleSearchService(List<Vehicle> vehicles)
   {
      _vehicles = vehicles;
   }

   /// <summary>
   /// Searches for vehicles based on optional filters.
   /// </summary>
   /// <param name="make">Filter by vehicle make (optional).</param>
   /// <param name="model">Filter by vehicle model (optional).</param>
   /// <param name="year">Filter by vehicle year (optional).</param>
   /// <param name="maxPrice">Filter by maximum price (optional).</param>
   /// <returns>A list of vehicles matching the criteria.</returns>
   public List<Vehicle> SearchVehicles(string make = null, string model = null, int? year = null, decimal? maxPrice = null)
   {
      return _vehicles.Where(v =>
               (string.IsNullOrEmpty(make) || v.Make.Equals(make, StringComparison.OrdinalIgnoreCase)) &&
               (string.IsNullOrEmpty(model) || v.Model.Equals(model, StringComparison.OrdinalIgnoreCase)) &&
               (!year.HasValue || v.Year == year.Value) &&
               (!maxPrice.HasValue || v.Price <= maxPrice.Value))
            .ToList();
   }
}

public class Program
{
   public static void Main(string[] args)
   {
      // Sample vehicle dataset
      var vehicles = new List<Vehicle>
      {
            new Vehicle { Make = "Toyota", Model = "Corolla", Year = 2020, Color = "White", Price = 20000 },
            new Vehicle { Make = "Honda", Model = "Civic", Year = 2021, Color = "Black", Price = 22000 },
            new Vehicle { Make = "Ford", Model = "Mustang", Year = 2018, Color = "Red", Price = 26000 },
            new Vehicle { Make = "Tesla", Model = "Model 3", Year = 2022, Color = "Blue", Price = 35000 }
      };

      var searchService = new VehicleSearchService(vehicles);

      // Example of searching vehicles
      Console.WriteLine("🔎 Search Results:");
      var searchResults = searchService.SearchVehicles(make: "Toyota", maxPrice: 25000);

      foreach (var vehicle in searchResults)
      {
            Console.WriteLine($"{vehicle.Make} {vehicle.Model}, Year: {vehicle.Year}, Color: {vehicle.Color}, Price: {vehicle.Price:C}");
      }
   }
}
```

## Requirements

1. Extend the Vehicle class to include an additional property: `Mileage` (in kilometers).
2. Update the `SearchVehicles` method to allow filtering by minimum mileage.
3. Add unit tests to ensure the functionality works as expected.
4. Optimize the `SearchVehicles` method to handle a larger dataset efficiently.
5. Refactor the program to support `async` searches.

## Bonus Tasks

1. Implement sorting (e.g., by price, year, or make) for search results.
2. Add support for pagination of search results.
3. Implement a more advanced search feature (e.g., fuzzy search, range search).