using System; using System.Collections.Generic; using System.Linq; namespace CarManagerV3 { // Could be made non-static / non-singleton if multiple collections are needed in the future. Not likely though. /// /// The StateManager class is responsible for managing the state of the car collection, including adding, removing, updating, and retrieving cars. /// Fully static / singleton at the moment, as only one collection is needed. /// internal class StateManager { // Initialize global static list of cars static List cars = new List(); // Initialize default file path for car data. // TODO: If no recent file paths are found, prompt user to select a file path instead of using a hardcoded default in the program folder. static string filePath = "cars.csv"; /// /// Gets a car by its identifier. /// /// The identifier. /// /// A object if found; otherwise, null. /// public static Car GetCarById(int id) { cars = SafeManager.ReadCars(filePath); return cars.FirstOrDefault(c => c.Id == id); } /// /// Public getter and setter for the cars list. Used to have better control over the list. /// /// /// The cars. /// public static List Cars { get { return cars; } set { cars = value; } } /// /// Adds a car to the collection. /// /// The car to add. public static void AddCar(Car car) { cars = SafeManager.ReadCars(filePath); cars.Add(car); SafeManager.SaveCars(filePath, cars); } /// /// Removes a car from the collection. /// /// The car to remove. public static void RemoveCar(Car car) { cars = SafeManager.ReadCars(filePath); Car existingCar = GetCarById(car.Id); if (existingCar == null) return; cars.Remove(existingCar); SafeManager.SaveCars(filePath, cars); } /// /// Updates a car in the collection. Identifies itself by its Id. /// /// /// If the car's Id has changed during editing, this will not work correctly. Keep Id immutable! /// /// The car to update. public static void UpdateCar(Car car) { Car existingCar = GetCarById(car.Id); if (existingCar != null) { int index = cars.IndexOf(existingCar); cars[index] = car; Console.WriteLine("Updated car: " + existingCar.Id); SafeManager.SaveCars(filePath, cars); } } /// /// Creates a new car and adds it to the collection. /// /// The make. /// The model. /// The year. /// The color. /// The mileage. /// The price. /// /// The newly created object. /// public static Car CreateCar(string make, string model, int year, string color, int mileage, decimal price) { cars = SafeManager.ReadCars(filePath); int newId = cars.Count > 0 ? cars.Max(c => c.Id) + 1 : 1; Car newCar = new Car(newId, make, model, year, color, mileage, price); AddCar(newCar); return newCar; } /// /// Sets the file path used for saving and loading car data. /// Called when user selects a new file path. /// /// The path. public static void setFilePath(string path) { filePath = path; } } }