# Platformă Print on Demand — Arhitectură Generală

## Stack tehnic
- **Backend:** Laravel 11 (PHP 8.2+)
- **Bază de date:** MySQL 8
- **Frontend client:** Blade + Alpine.js + Tailwind (compatibil cPanel, fără build complex) — poate fi înlocuit ulterior cu Vue/React SPA dacă treci pe VPS
- **Admin panel:** Laravel + Filament PHP (admin panel modern, rapid de construit, rulează perfect pe cPanel)
- **Autentificare:** Laravel Breeze/Sanctum (client) + Filament auth (admin)
- **Roluri & permisiuni:** Spatie Laravel-Permission
- **Facturare PDF:** barryvdh/laravel-dompdf sau spatie/laravel-pdf
- **Cozi (queues):** Database driver + cron (`* * * * * php artisan schedule:run`)
- **Plăți online:** Stripe SDK, Netopia mobilPay SDK, EuPlătesc SDK (module separate, interfață comună `PaymentGatewayInterface`)
- **Captcha:** Google reCAPTCHA v3 (invisible) via `anhskohbo/no-captcha`
- **Notificări email:** Laravel Notifications + queue, template-uri editabile din admin (stocate în DB, nu hardcodate)

## Multi-limbă (Deutsch / Română / English)

Platforma e construită **multi-limbă din start**, nu ca traducere ulterioară:

- **Limba principală: Germană** (`de`), secundare: **Română** (`ro`) și **Engleză** (`en`) — configurabile în `config/localization.php`, se pot adăuga oricând limbi noi.
- **Selector de limbă** vizibil peste tot — frontend (header) și admin (Filament) — vezi `resources/views/components/language-switcher.blade.php`.
- **Detectare automată a limbii** (`App\Http\Middleware\SetLocale`), în ordine: limba aleasă manual în sesiune → limba salvată pe contul clientului → limba browserului → germană (implicit).
- **Textele fixe ale interfeței** (butoane, meniuri, mesaje) sunt în `lang/de`, `lang/ro`, `lang/en` — fișiere standard Laravel, editabile de dezvoltator.
- **Conținutul editabil din admin** (nume produse, descrieri, categorii, opțiuni, template-uri email, discounturi) e **traductibil per-câmp**, stocat ca JSON în DB (`{"de": "...", "ro": "...", "en": "..."}`) via pachetul `spatie/laravel-translatable`. Adminul completează fiecare limbă separat, direct din formularul Filament (tab-uri DE/RO/EN pe fiecare câmp).
- **Emailurile automate de status comandă** se trimit mereu în limba preferată a clientului (salvată pe cont), indiferent în ce limbă navighează adminul care schimbă statusul.
- Fiecare produs are un singur `slug` (URL), comun tuturor limbilor — decizie simplă, evită duplicarea rutelor; dacă vrei URL-uri traduse (`/de/produkte/...` vs `/ro/produse/...`) se poate adăuga ulterior fără să schimbăm schema de bază.

## Module principale (roadmap)

| # | Modul | Status |
|---|-------|--------|
| 1 | Bază de date completă (schema) | ✅ În lucru acum |
| 2 | Roluri & permisiuni (RBAC configurabil din admin) | ✅ În lucru acum |
| 3 | Produse configurabile (opțiuni, variante, prețuri dinamice) | ✅ În lucru acum |
| 4 | Autentificare + cont client | ✅ În lucru acum |
| 5 | Comenzi + status comandă (email real-time) | ✅ În lucru acum |
| 6 | Facturare (emitere, serii, descărcare individual/bulk) | ✅ În lucru acum |
| 7 | Furnizori (facturi, datorii, plăți, stocuri materiale) | ✅ În lucru acum |
| 8 | Discounturi clienți | ✅ În lucru acum |
| 9 | POS (comandă + plată în magazin) | Etapa următoare |
| 10 | Integrare API plăți online (Stripe/Netopia/EuPlătesc) | Etapa următoare |
| 11 | Rapoarte de activitate | Etapa următoare |
| 12 | Personalizare template-uri email/facturi din admin | Etapa următoare |
| 13 | Cereri personalizate client (upload fișiere, discuție cu admin) | Etapa următoare |
| 14 | reCAPTCHA pe formulare | Etapa următoare |

> Construim în straturi: mai întâi fundația (DB + modele + relații), apoi logica de business (servicii), apoi controllerele și interfața. Fiecare etapă e funcțională de sine stătător.

## Structură foldere
```
pod-platform/
├── database/
│   ├── migrations/       → toate tabelele (schema completă)
│   └── seeders/          → roluri, permisiuni, date demo
├── app/
│   ├── Models/           → Eloquent models + relații
│   ├── Http/Controllers/
│   │   ├── Auth/         → înregistrare, login client
│   │   ├── Admin/        → panou control admin
│   │   └── Api/          → endpoint-uri API (payment webhooks, etc.)
│   ├── Services/         → logică business (PricingService, InvoiceService, PaymentGatewayInterface)
│   └── Middleware/       → verificare roluri/permisiuni pe rute
├── routes/
└── docs/                 → documentație tehnică
```

## Instalare pe cPanel (rezumat)
1. Upload cod via Git/FTP sau `git clone` prin Terminal cPanel.
2. `composer install` (ai nevoie de acces SSH/Terminal în cPanel — verifică la provider).
3. Creezi baza de date MySQL din cPanel → "MySQL Databases", adaugi datele în `.env`.
4. Setezi document root-ul domeniului spre `pod-platform/public`.
5. `php artisan migrate --seed`.
6. Adaugi Cron Job în cPanel: `* * * * * cd /home/user/pod-platform && php artisan schedule:run >> /dev/null 2>&1`.
7. `php artisan storage:link` pentru upload-uri (imagini produse, fișiere cereri personalizate).

Detalii complete de instalare vor fi într-un `INSTALARE.md` separat, la finalul proiectului.
