Files
Petr_PTA25_Proj_02-10/dealer/DataManager.cs
2026-02-17 15:33:05 +01:00

288 lines
8.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace dealer
{
public class DataManager
{
private List<Vehicle> vehicles = new List<Vehicle>();
private List<Owner> owners = new List<Owner>();
private List<Image> images = new List<Image>();
// Vehicle CRUD
public void AddVehicle(Vehicle vehicle)
{
vehicles.Add(vehicle);
}
public IEnumerable<Vehicle> GetAllVehicles()
{
return vehicles;
}
public void RemoveVehicle(Vehicle vehicle)
{
vehicles.Remove(vehicle);
}
// Owner CRUD
public void AddOwner(Owner owner)
{
owners.Add(owner);
}
public IEnumerable<Owner> GetAllOwners()
{
return owners;
}
public Owner? GetOwnerById(Guid? id)
{
if (id == null) return null;
return owners.FirstOrDefault(o => o.Id == id);
}
public void RemoveOwner(Owner owner)
{
// Remove owner reference from all vehicles
foreach (var vehicle in vehicles.Where(v => v.VlastnikId == owner.Id))
{
vehicle.VlastnikId = null;
vehicle.Vlastnik = null;
}
owners.Remove(owner);
}
public IEnumerable<Owner> SearchOwners(string searchText)
{
if (string.IsNullOrWhiteSpace(searchText))
return owners;
searchText = searchText.ToLower();
return owners.Where(o =>
(o.Jmeno?.ToLower().Contains(searchText) ?? false) ||
(o.Prijmeni?.ToLower().Contains(searchText) ?? false) ||
(o.Email?.ToLower().Contains(searchText) ?? false) ||
(o.Telefon?.Contains(searchText) ?? false) ||
(o.CeleJmeno?.ToLower().Contains(searchText) ?? false));
}
// Image CRUD
public void AddImage(Image image)
{
images.Add(image);
}
public IEnumerable<Image> GetAllImages()
{
return images;
}
public Image? GetImageById(Guid? id)
{
if (id == null) return null;
return images.FirstOrDefault(i => i.Id == id);
}
public void RemoveImage(Image image)
{
// Remove image reference from all vehicles
foreach (var vehicle in vehicles.Where(v => v.FotografieId == image.Id))
{
vehicle.FotografieId = null;
vehicle.Fotografie = null;
}
images.Remove(image);
}
// Link owners and images to vehicles after loading
private void LinkRelationsToVehicles()
{
foreach (var vehicle in vehicles)
{
if (vehicle.VlastnikId.HasValue)
{
vehicle.Vlastnik = GetOwnerById(vehicle.VlastnikId);
}
if (vehicle.FotografieId.HasValue)
{
vehicle.Fotografie = GetImageById(vehicle.FotografieId);
}
}
}
public void Save()
{
// Save vehicles
var vehiclesJson = System.Text.Json.JsonSerializer.Serialize(vehicles);
System.IO.File.WriteAllText("vehicles.json", vehiclesJson);
// Save owners
var ownersJson = System.Text.Json.JsonSerializer.Serialize(owners);
System.IO.File.WriteAllText("owners.json", ownersJson);
// Save images
var imagesJson = System.Text.Json.JsonSerializer.Serialize(images);
System.IO.File.WriteAllText("images.json", imagesJson);
}
public void Load()
{
// Load owners first
string ownersPath = "owners.json";
if (System.IO.File.Exists(ownersPath))
{
var json = System.IO.File.ReadAllText(ownersPath);
owners = System.Text.Json.JsonSerializer.Deserialize<List<Owner>>(json) ?? new List<Owner>();
}
// Load images
string imagesPath = "images.json";
if (System.IO.File.Exists(imagesPath))
{
var json = System.IO.File.ReadAllText(imagesPath);
images = System.Text.Json.JsonSerializer.Deserialize<List<Image>>(json) ?? new List<Image>();
}
// Load vehicles
string vehiclesPath = "vehicles.json";
if (System.IO.File.Exists(vehiclesPath))
{
var json = System.IO.File.ReadAllText(vehiclesPath);
vehicles = System.Text.Json.JsonSerializer.Deserialize<List<Vehicle>>(json) ?? new List<Vehicle>();
}
// Link relations to vehicles
LinkRelationsToVehicles();
// If no data exists, seed with sample data
if (!vehicles.Any() && !owners.Any())
{
SeedData();
}
}
private void SeedData()
{
// Seed owners
var owner1 = new Owner
{
Id = Guid.NewGuid(),
Jmeno = "Jan",
Prijmeni = "Novak",
Adresa = "Praha 1, Vaclavske namesti 1",
Telefon = "+420 123 456 789",
Email = "jan.novak@email.cz"
};
var owner2 = new Owner
{
Id = Guid.NewGuid(),
Jmeno = "Marie",
Prijmeni = "Svobodova",
Adresa = "Brno, Husova 23",
Telefon = "+420 987 654 321",
Email = "marie.svobodova@email.cz"
};
var owner3 = new Owner
{
Id = Guid.NewGuid(),
Jmeno = "Petr",
Prijmeni = "Dvorak",
Adresa = "Ostrava, Hlavni 45",
Telefon = "+420 777 888 999",
Email = "petr.dvorak@email.cz"
};
owners.Add(owner1);
owners.Add(owner2);
owners.Add(owner3);
// Seed images (1x1 pixel placeholder images in different colors)
var image1 = new Image
{
Id = Guid.NewGuid(),
Data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg==",
FileName = "skoda_octavia.png",
ContentType = "image/png"
};
var image2 = new Image
{
Id = Guid.NewGuid(),
Data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg==",
FileName = "bmw_x5.png",
ContentType = "image/png"
};
var image3 = new Image
{
Id = Guid.NewGuid(),
Data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==",
FileName = "tesla_model3.png",
ContentType = "image/png"
};
images.Add(image1);
images.Add(image2);
images.Add(image3);
// Seed vehicles
vehicles.Add(new Vehicle
{
Spz = "1A2 3456",
Znacka = "Skoda",
Model = "Octavia",
Barva = "#0055AA",
RokVyroby = 2020,
Palivo = "Benzín",
NajeteKm = 45000,
Cena = 350000,
VlastnikId = owner1.Id,
Vlastnik = owner1,
FotografieId = image1.Id,
Fotografie = image1
});
vehicles.Add(new Vehicle
{
Spz = "7B8 9012",
Znacka = "BMW",
Model = "X5",
Barva = "#000000",
RokVyroby = 2019,
Palivo = "Nafta",
NajeteKm = 78000,
Cena = 850000,
VlastnikId = owner2.Id,
Vlastnik = owner2,
FotografieId = image2.Id,
Fotografie = image2
});
vehicles.Add(new Vehicle
{
Spz = "3C4 5678",
Znacka = "Tesla",
Model = "Model 3",
Barva = "#FFFFFF",
RokVyroby = 2022,
Palivo = "Elektro",
NajeteKm = 15000,
Cena = 1200000,
VlastnikId = owner3.Id,
Vlastnik = owner3,
FotografieId = image3.Id,
Fotografie = image3
});
// Save the seeded data
Save();
}
}
}