# Database Setup și Seed

## Instalare Baza de Date

### 1. Creează baza de date

```sql
CREATE DATABASE cartzilla_shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

### 2. Rulează schema

**Opțiunea 1: Folosind MySQL CLI**
```bash
mysql -u root -p cartzilla_shop < database/schema.sql
```

**Opțiunea 2: Folosind phpMyAdmin**
- Deschide phpMyAdmin
- Selectează baza de date `cartzilla_shop`
- Mergi la tab-ul "Import"
- Selectează fișierul `database/schema.sql`
- Click "Go"

**Opțiunea 3: Folosind XAMPP Control Panel**
- Deschide phpMyAdmin din XAMPP
- Selectează baza de date `cartzilla_shop`
- Click pe tab-ul "SQL"
- Copiază și lipește conținutul din `database/schema.sql`
- Click "Go"

### 3. Rulează seed-ul

**Opțiunea 1: Folosind PHP (recomandat)**
```bash
php database/seed.php
```

**Opțiunea 2: Folosind MySQL CLI**
```bash
mysql -u root -p cartzilla_shop < database/seed.sql
```

**Opțiunea 3: Folosind phpMyAdmin**
- Selectează baza de date `cartzilla_shop`
- Mergi la tab-ul "Import"
- Selectează fișierul `database/seed.sql`
- Click "Go"

## Date de Test Create

### Administratori
- **Super Admin**: admin@cartzilla-shop.com / password
- **Manager**: manager@cartzilla-shop.com / password

### Utilizatori
- **Ion Popescu**: ion.popescu@example.com / password (utilizator normal)
- **Maria Ionescu**: maria.ionescu@example.com / password (B2B - Clienți Business, 10% discount)
- **Gheorghe Georgescu**: gheorghe.georgescu@example.com / password (B2B - Distribuitori, 20% discount, utilizator legal)
- **Ana Marinescu**: ana.marinescu@example.com / password (utilizator normal)
- **Petru Constantinescu**: petru.constantinescu@example.com / password (B2B - Parteneri Premium, 15% discount, utilizator legal)

### Produse (18 produse)
- **Telefoane**: iPhone 15 Pro, Samsung Galaxy S24 Ultra, Xiaomi Redmi Note 13 Pro, Google Pixel 8 Pro
- **Laptopuri**: MacBook Pro 14" M3, Dell XPS 15, ASUS ROG Strix G16
- **Tablete**: iPad Pro 12.9" M2, Samsung Galaxy Tab S9 Ultra
- **Accesorii**: AirPods Pro 2, Sony WH-1000XM5, Logitech MX Master 3S, Apple Magic Keyboard
- **Smartwatch**: Apple Watch Series 9, Samsung Galaxy Watch 6
- **TV & Audio**: Samsung 4K Smart TV 55", LG OLED 65" C3

### Categorii
- **Electronice** (categorie principală)
  - Telefoane
  - Laptopuri
  - Tablete
  - Accesorii
  - TV & Audio
  - Smartwatch

### Furnizori (4 furnizori)
- TechSupplier SRL
- ElectroDist SRL
- GadgetPro SRL
- FashionLine SRL

### Grupuri B2B (4 grupuri)
- **Clienți Business**: 10% discount
- **Distribuitori**: 20% discount
- **Parteneri Premium**: 15% discount
- **Revânzători**: 25% discount

### Cupoane (5 cupoane)
- **WELCOME10**: 10% reducere, minim 100 RON
- **SAVE50**: 50 RON reducere, minim 200 RON
- **FREESHIP**: Transport gratuit, minim 300 RON
- **BLACKFRIDAY25**: 25% reducere, minim 500 RON, max 500 RON
- **SUMMER15**: 15% reducere, minim 150 RON

### Reguli Produse Cadou
- Cumpără iPhone 15 Pro → Primești AirPods Pro 2
- Cumpără MacBook Pro 14" M3 → Primești AirPods Pro 2

### Comenzi de Test (4 comenzi)
- ORD-2024-001: Ion Popescu - AirPods Pro 2 (livrată)
- ORD-2024-002: Maria Ionescu - iPad Pro 12.9" M2 (expediată)
- ORD-2024-003: Gheorghe Georgescu - MacBook Pro 14" M3 cu cupon WELCOME10 (în procesare)
- ORD-2024-004: Ion Popescu - Apple Watch Series 9 (în așteptare)

### Alte Date
- 5 Adrese salvate pentru utilizatori
- 5 Recenzii produse
- 6 Produse în wishlist
- 4 Istorii puncte loialitate
- 3 Coșuri (inclusiv coșuri abandonate pentru testare)

## Resetare Date

Pentru a reseta și re-popula baza de date:

**Opțiunea 1: Ștergere completă și recreare**
```sql
-- Atenție: Aceasta va șterge TOATE datele!
DROP DATABASE cartzilla_shop;
CREATE DATABASE cartzilla_shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

Apoi rulează din nou `schema.sql` și `seed.sql`.

**Opțiunea 2: Truncate tabele (păstrează structura)**
```sql
-- Atenție: Aceasta va șterge TOATE datele!
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE order_items;
TRUNCATE TABLE orders;
TRUNCATE TABLE cart_items;
TRUNCATE TABLE cart;
TRUNCATE TABLE wishlist;
TRUNCATE TABLE reviews;
TRUNCATE TABLE loyalty_points;
TRUNCATE TABLE abandoned_cart_emails;
TRUNCATE TABLE gift_products;
TRUNCATE TABLE coupons;
TRUNCATE TABLE addresses;
TRUNCATE TABLE b2b_group_users;
TRUNCATE TABLE b2b_product_prices;
TRUNCATE TABLE users;
TRUNCATE TABLE admins;
TRUNCATE TABLE products;
TRUNCATE TABLE suppliers;
TRUNCATE TABLE b2b_groups;
TRUNCATE TABLE categories;
SET FOREIGN_KEY_CHECKS = 1;
```

Apoi rulează din nou `seed.php` sau `seed.sql`.

## Structura Bazei de Date

### Tabele Principale
1. **users** - Utilizatori (clienți)
2. **admins** - Administratori
3. **categories** - Categorii produse
4. **suppliers** - Furnizori
5. **products** - Produse
6. **cart** - Coșuri de cumpărături
7. **cart_items** - Articole din coș
8. **addresses** - Adrese utilizatori
9. **orders** - Comenzi
10. **order_items** - Articole comandă
11. **reviews** - Recenzii produse
12. **wishlist** - Listă de dorințe
13. **coupons** - Cupoane de reducere
14. **abandoned_cart_emails** - Email-uri coșuri abandonate
15. **loyalty_points** - Istoric puncte loialitate
16. **b2b_groups** - Grupuri B2B
17. **b2b_group_users** - Utilizatori în grupuri B2B
18. **b2b_product_prices** - Prețuri specifice produse B2B
19. **gift_products** - Reguli produse cadou
20. **import_export_logs** - Log-uri import/export

## Note Importante

- Toate parolele pentru utilizatori și admini sunt: **password**
- Hash-ul parolei: `$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi`
- Schema folosește `DROP TABLE IF EXISTS` pentru a permite rularea multiplă
- Seed-ul folosește `INSERT IGNORE` și `ON DUPLICATE KEY UPDATE` pentru a permite rularea multiplă fără erori
- Toate tabelele folosesc `utf8mb4` pentru suport complet Unicode
- Foreign keys sunt configurate cu `ON DELETE CASCADE` sau `ON DELETE SET NULL` conform logicii de business

## Verificare Instalare

După rularea schema și seed, verifică:

```sql
-- Verifică numărul de înregistrări
SELECT 
    'admins' as tabel, COUNT(*) as count FROM admins
UNION ALL
SELECT 'categories', COUNT(*) FROM categories
UNION ALL
SELECT 'products', COUNT(*) FROM products
UNION ALL
SELECT 'users', COUNT(*) FROM users
UNION ALL
SELECT 'orders', COUNT(*) FROM orders;
```

Ar trebui să vezi:
- 2 administratori
- 11 categorii (1 principală + 6 subcategorii + 4 alte categorii principale)
- 18 produse
- 5 utilizatori
- 4 comenzi
