# Solución de Permisos para Storage de Documentos

## Problema

El sistema no puede guardar los PDFs de pólizas y marbetes porque el directorio `/var/www/html/segurosapi/storage/documents` no tiene permisos de escritura.

**Error:**
```
No se pudo crear el directorio de almacenamiento
```

## Diagnóstico

### 1. Verificar el problema desde la API

Visita este endpoint (requiere autenticación):
```
https://www.redbajasusa.com/segurosapi/api/check-storage
```

O usa este comando:
```bash
curl -H "X-API-Key: TU_API_KEY" \
     -H "X-API-Secret: TU_API_SECRET" \
     https://www.redbajasusa.com/segurosapi/api/check-storage
```

### 2. Verificar desde el panel admin

Visita:
```
https://www.redbajasusa.com/segurosapi/admin/fix_storage_permissions.php
```

Esto te mostrará:
- ✅/❌ Si el directorio existe
- ✅/❌ Si es escribible
- Permisos actuales
- Usuario propietario
- Espacio disponible
- Pruebas de escritura

## Solución

### Opción A: Desde SSH (Recomendado)

Conéctate por SSH al servidor y ejecuta:

```bash
# 1. Ir al directorio del proyecto
cd /var/www/html/segurosapi

# 2. Crear el directorio si no existe
sudo mkdir -p storage/documents

# 3. Establecer permisos correctos
sudo chmod -R 775 storage

# 4. Establecer el propietario correcto
# Reemplaza 'usuario' con el usuario de PHP (normalmente www-data, apache, o nginx)
sudo chown -R usuario:www-data storage

# 5. Verificar que funcionó
ls -la storage/
```

### Opción B: Desde cPanel/Plesk

1. **Accede al File Manager**
2. **Navega a:** `/var/www/html/segurosapi`
3. **Crea el directorio** `storage/documents` si no existe
4. **Haz clic derecho** en la carpeta `storage`
5. **Selecciona "Permissions" o "Permisos"**
6. **Establece:** `775` (rwxrwxr-x)
   - ✅ Owner: Read, Write, Execute
   - ✅ Group: Read, Write, Execute
   - ✅ Public: Read, Execute
7. **Marca:** "Apply to subdirectories"
8. **Guarda**

### Opción C: Desde FTP

Si solo tienes acceso FTP, los permisos en formato octal son:
- `storage` → `775`
- `storage/documents` → `775`

## Verificación

Después de aplicar los cambios:

### 1. Verifica desde el admin
```
https://www.redbajasusa.com/segurosapi/admin/fix_storage_permissions.php
```

Deberías ver:
```
✅ Directorio base existe
✅ Directorio es escribible
✅ Subdirectorio de prueba creado
✅ Archivo de prueba creado exitosamente
🎉 TODO ESTÁ CONFIGURADO CORRECTAMENTE
```

### 2. Prueba una venta real

1. Ve a `https://www.redbajasusa.com/segurosapi/prueba.html`
2. Procesa una venta completa
3. Verifica que la póliza se emitió sin errores
4. Ve al admin → Transacciones → Detalles
5. Deberías ver los PDFs disponibles para descargar

## Estructura Correcta

```
/var/www/html/segurosapi/
└── storage/                     (775)
    └── documents/               (775)
        ├── .htaccess            (644)
        ├── README.md            (644)
        └── 2025/                (775) ← Se crea automáticamente
            └── 11/              (775) ← Se crea automáticamente
                ├── poliza_1-600-45420-1_1730935147.pdf
                └── marbete_1-600-45420-1_1730935147.pdf
```

## Permisos Recomendados

| Archivo/Directorio | Permisos | Octal | Descripción |
|-------------------|----------|-------|-------------|
| `storage/` | `drwxrwxr-x` | 775 | Usuario y grupo pueden escribir |
| `storage/documents/` | `drwxrwxr-x` | 775 | Usuario y grupo pueden escribir |
| `storage/documents/2025/` | `drwxrwxr-x` | 775 | Creado automáticamente |
| `*.pdf` | `-rw-r--r--` | 644 | Solo lectura para público |
| `.htaccess` | `-rw-r--r--` | 644 | Solo lectura |

## Usuario y Grupo

El directorio debe pertenecer al usuario que ejecuta PHP:

| Servidor Web | Usuario Típico | Comando |
|--------------|----------------|---------|
| Apache | `www-data` o `apache` | `sudo chown -R www-data:www-data storage` |
| Nginx | `nginx` o `www-data` | `sudo chown -R nginx:nginx storage` |
| cPanel | Usuario de cPanel | `sudo chown -R cpaneluser:cpaneluser storage` |

## Si Nada Funciona

Si después de todo esto sigue sin funcionar:

1. **Verifica SELinux** (en CentOS/RHEL):
   ```bash
   sudo chcon -R -t httpd_sys_rw_content_t storage/
   ```

2. **Verifica que PHP tenga permisos**:
   ```bash
   # Ver qué usuario ejecuta PHP
   ps aux | grep php

   # Ver permisos del directorio
   ls -la storage/
   ```

3. **Revisa los logs de PHP**:
   ```bash
   tail -f /var/log/php/error.log
   # o
   tail -f /var/log/apache2/error.log
   ```

4. **Contacta al soporte del hosting** con este mensaje:
   ```
   Hola, necesito ayuda para establecer permisos de escritura
   en el directorio /var/www/html/segurosapi/storage/documents

   El usuario que ejecuta PHP necesita poder crear subdirectorios
   y archivos en esta ubicación para guardar PDFs.

   Permisos requeridos: 775 (rwxrwxr-x)
   ```

## Seguridad

El archivo `.htaccess` en `storage/documents/` previene el acceso directo a los PDFs:

```apache
# /storage/documents/.htaccess
Order Deny,Allow
Deny from all
```

Los PDFs solo se pueden descargar a través de la API autenticada:
```
GET /api/download-document?transaction_id=67&type=poliza
```

## Referencias

- [Documentación de DocumentManager](./classes/DocumentManager.php)
- [Script de verificación](./admin/fix_storage_permissions.php)
- [Endpoint de diagnóstico](./api/index.php) → `/check-storage`
