# Setup Instructions — PStore3 Laravel Backend

Run all commands inside the `laravel-backend/src` directory.

## Instalación completa

```bash
# 1. Instalar dependencias (incluye tymon/jwt-auth ^2.1)
composer install

# 2. Copiar variables de entorno
cp .env.example .env

# 3. Generar app key
php artisan key:generate

# 4. Publicar config JWT y generar secret
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
php artisan jwt:secret

# 5. Ejecutar migraciones (19 tablas normalizadas)
php artisan migrate

# 6. Cargar datos iniciales
php artisan db:seed

# 7. Levantar servidor
php artisan serve
```

## Usuario administrador por defecto

| Campo    | Valor             |
|----------|-------------------|
| nick     | adminjon          |
| password | 4928666           |
| email    | adminjon@pstore.local |
| rol      | Administrador     |

## Login (ejemplo)

```
POST /api/auth/login
Content-Type: application/json

{ "nick": "adminjon", "password": "4928666" }
```

Respuesta: `{ "access_token": "...", "token_type": "bearer", "expires_in": 3600, "user": {...} }`

Usar en siguientes requests: `Authorization: Bearer <token>`

## Pagos soportados (POST /api/sales)

```json
{
  "order_id": 1,
  "cash_session_id": 1,
  "payments": [
    { "method": "cash", "amount": 50.00 },
    { "method": "card", "amount": 30.00, "reference_key": "TXN-123456" },
    { "method": "qr",   "amount": 20.00, "reference_key": "QR-ABC789" }
  ]
}
```

Métodos válidos: **cash**, **card**, **qr**. Se pueden combinar en una misma venta.

## Flujo de trabajo típico

```
1. POST /api/auth/login                    → obtener token
2. POST /api/cash-sessions/open            → abrir caja del día
3. POST /api/orders                        → crear pedido con items
4. PATCH /api/orders/{id}/status           → actualizar estado (cocina → listo → entregado)
5. POST /api/sales                         → cobrar (con payments: cash/card/qr)
6. POST /api/bills                         → emitir factura (opcional)
7. POST /api/cash-sessions/{id}/close      → cerrar caja con monto final
```

## Estructura de tablas

```
roles → users ← branches
categories → products → flavors
types
customers
cash_sessions
orders → order_items
sales → sale_payments (cash | card | qr)
bills
expenses
discounts
privileges
business_settings + billing_settings (por branch)
audit_logs
```

## Nota PSR-4

Los controllers están en `app/Http/Controllers/` con namespace `App\Http\Controllers\Api\`.
El `composer.json` incluye una entrada PSR-4 específica para este mapeo — no es necesario moverlos.

