# Evidence Autobazaru - WPF Aplikace

## Popis projektu
WPF aplikace pro evidenci vozidel v autobazaru s možností serializace a deserializace dat.

## Funkce aplikace

### ? Implementované funkce
- **CRUD operace**
  - Create (Přidání vozidla)
  - Read (Zobrazení seznamu a detailů)
  - Update (Úprava vozidel)
  - Delete (Mazání vozidel)

- **Serializace a deserializace**
  - Ukládání dat do JSON souboru (`vehicles.json`)
  - Automatické načítání dat při spuštění aplikace

- **Evidence vozidel**
  - SPZ
  - Značka (např. Škoda, BMW, Audi)
  - Model
  - Rok výroby
  - Palivo (Benzín, Nafta, Elektro, Hybrid, LPG, CNG)
  - Nájezd v km
  - Cena v Kč
  - Barva (s výběrem z Color Dialogu)
  - Fotografie (uložená jako Base64)

- **Evidence vlastníků**
  - Jméno
  - Příjmení
  - Adresa
  - Telefon
  - Email

### ??? Uživatelské rozhraní

#### Hlavní okno (MainWindow)
- Seznam všech vozidel v přehledné tabulce
- Zobrazení: SPZ, Značka a Model, Barva, Rok, Palivo
- Akce:
  - **Přidat vozidlo** - otevře okno pro přidání nového vozidla
  - **Detail** - zobrazí detailní informace o vybraném vozidle
  - **Upravit** - umožní editaci vybraného vozidla
  - **Smazat** - smaže vybrané vozidlo (s potvrzením)
- **Double-click** na vozidlo otevře detail

#### Okno přidání vozidla (AddVehicleWindow)
- Formulář pro zadání všech údajů o vozidle
- Výběr barvy pomocí Color Dialogu
- Výběr paliva z ComboBoxu
- Možnost přidat fotografii
- Sekce pro zadání informací o vlastníkovi
- Validace číselných vstupů

#### Okno úpravy vozidla (EditVehicleWindow)
- Předvyplněné údaje z vybraného vozidla
- Náhled aktuální fotografie
- Možnost změny všech údajů včetně vlastníka
- Stejné funkce jako v okně přidání

#### Okno detailu vozidla (VehicleDetailWindow)
- Kompletní zobrazení všech informací
- Zobrazení fotografie vozidla
- Informace o vlastníkovi
- Tlačítka pro úpravu, smazání nebo zavření

## Struktura projektu

### Třídy

#### `Vehicle.cs`
```csharp
- Spz: string
- Znacka: string
- Model: string
- Barva: string
- RokVyroby: int?
- Palivo: string
- NajeteKm: int?
- Cena: decimal?
- Fotografie: string (Base64)
- Vlastnik: Owner
- ZnackaModel: string (computed property)
```

#### `Owner.cs`
```csharp
- Jmeno: string
- Prijmeni: string
- Adresa: string
- Telefon: string
- Email: string
- CeleJmeno: string (computed property)
```

#### `DataManager.cs`
```csharp
- AddVehicle(Vehicle)
- GetAllVehicles(): IEnumerable<Vehicle>
- RemoveVehicle(Vehicle)
- Save() - serializace do JSON
- Load() - deserializace z JSON
```

## Technologie
- **.NET 8.0**
- **WPF (Windows Presentation Foundation)**
- **System.Text.Json** - pro serializaci/deserializaci
- **Windows Forms ColorDialog** - pro výběr barvy

## Principy návrhu

### Separation of Concerns (SoC)
- **Model** - `Vehicle.cs`, `Owner.cs`
- **Data Logic** - `DataManager.cs`
- **View** - XAML soubory (MainWindow, AddVehicleWindow, EditVehicleWindow, VehicleDetailWindow)
- **View Logic** - Code-behind soubory (.xaml.cs)

### Čistota kódu
- Jasné pojmenování proměnných a metod
- Validace vstupů (PreviewTextInput pro číselné hodnoty)
- Ošetření chyb (try-catch bloky při práci s obrázky)
- Oddělení logiky od prezentace

## Instalace a spuštění

1. Otevřete projekt v **Visual Studio 2022** nebo novějším
2. Ujistěte se, že máte nainstalovaný **.NET 8.0 SDK**
3. Stiskněte **F5** nebo klikněte na **Start** pro spuštění aplikace
4. Data se automaticky ukládají do souboru `vehicles.json` ve stejné složce jako aplikace

## Ovládání aplikace

### Přidání vozidla
1. Klikněte na tlačítko **"Přidat vozidlo"**
2. Vyplňte údaje o vozidle
3. Vyberte barvu pomocí tlačítka **"Vybrat barvu"**
4. (Volitelně) Vyberte fotografii
5. (Volitelně) Vyplňte údaje o vlastníkovi
6. Klikněte na **"Ulozit"**

### Zobrazení detailu
- **Double-click** na vozidlo v seznamu, nebo
- Vyberte vozidlo a klikněte na **"Detail"**

### Úprava vozidla
1. Vyberte vozidlo v seznamu
2. Klikněte na **"Upravit"**
3. Změňte požadované údaje
4. Klikněte na **"Ulozit"**

### Smazání vozidla
1. Vyberte vozidlo v seznamu
2. Klikněte na **"Smazat"**
3. Potvrďte smazání

## Ukládání dat

Data jsou uložena v souboru **`vehicles.json`** ve formátu:
```json
[
  {
    "Spz": "1A2 3456",
    "Znacka": "Skoda",
    "Model": "Octavia",
    "Barva": "#FF0000",
    "RokVyroby": 2020,
    "Palivo": "Benzín",
    "NajeteKm": 50000,
    "Cena": 350000,
    "Fotografie": "base64_string...",
    "Vlastnik": {
      "Jmeno": "Jan",
      "Prijmeni": "Novak",
      "Adresa": "Praha 1",
      "Telefon": "+420123456789",
      "Email": "jan.novak@email.cz"
    }
  }
]
```

## Autor
Vytvořeno pro předmět PTA25 - Programování v C#

## Termín odevzdání
**1. 3. 2026**
