# Solución: Aplicación de Configuraciones Globales a Proyectos

## Problema Identificado
Cuando se agregaban nuevos proyectos al sistema, no se estaban asignando las configuraciones globales de backup definidas en `config.json`. Los proyectos solo recibían configuraciones básicas como `default_schedule` y `default_schedule_time`, pero faltaban configuraciones importantes como:

- `retry_delay_hours`: Tiempo de espera antes de reintentar un backup fallido
- `backup_timeout_minutes`: Tiempo máximo para completar un backup
- `min_backup_interval_minutes`: Intervalo mínimo entre backups del mismo proyecto
- `min_free_space_mb`: Espacio mínimo requerido antes de hacer backup
- Todas las configuraciones de `backup_options` (compresión, algoritmo de hash, etc.)

## Cambios Realizados

### 1. Nuevo Método en ProjectDiscoveryService
Se agregó el método `_apply_global_configurations()` en `src/services/project_discovery_service.py`:

```python
def _apply_global_configurations(self, project_data: Dict[str, Any]) -> Dict[str, Any]:
    """Apply all global configurations to a new project"""
    global_settings = self.config.global_settings
    backup_options = self.config.backup_options
    
    # Apply global settings to schedule_config
    project_data["schedule_config"].update({
        "retry_delay_hours": global_settings.get("retry_delay_hours", 1),
        "backup_timeout_minutes": global_settings.get("backup_timeout_minutes", 0),
        "min_backup_interval_minutes": global_settings.get("min_backup_interval_minutes", 10),
        "min_free_space_mb": global_settings.get("min_free_space_mb", 100),
        # ... configuraciones existentes
    })
    
    # Apply backup options
    project_data["backup_options"] = {
        "compression_level": backup_options.get("compression_level", 6),
        "include_subdirectories": backup_options.get("include_subdirectories", True),
        # ... todas las opciones de backup
    }
    
    return project_data
```

### 2. Modificación de Funciones de Creación de Proyectos
Se actualizaron las funciones `_create_project_from_s7p()` y `_create_manual_project()` para aplicar las configuraciones globales:

```python
# Apply global configurations
project_data = self._apply_global_configurations(project_data)

return Project(project_data)
```

### 3. Actualización del Modelo Project
Se expandió la clase `Project` en `src/models/project_model.py` para manejar las nuevas configuraciones:

**En el constructor:**
```python
# Configuraciones de backup (heredadas de configuración global)
backup_options = project_data.get("backup_options", {})
self.compression_level = backup_options.get("compression_level", 6)
self.include_subdirectories = backup_options.get("include_subdirectories", True)
# ... todas las opciones de backup

# Configuraciones adicionales del proyecto (heredadas de global_settings)
self.retry_delay_hours = schedule_config.get("retry_delay_hours", 1)
self.backup_timeout_minutes = schedule_config.get("backup_timeout_minutes", 0)
# ... configuraciones adicionales
```

**En el método `to_dict()`:**
```python
"schedule_config": {
    # ... configuraciones existentes
    "retry_delay_hours": self.retry_delay_hours,
    "backup_timeout_minutes": self.backup_timeout_minutes,
    "min_backup_interval_minutes": self.min_backup_interval_minutes,
    "min_free_space_mb": self.min_free_space_mb,
},
"backup_options": {
    "compression_level": self.compression_level,
    "include_subdirectories": self.include_subdirectories,
    # ... todas las opciones de backup
},
```

### 4. Actualización de Proyectos Existentes
Se ejecutó un script para actualizar los 158 proyectos existentes con las configuraciones globales que faltaban, creando un backup de seguridad antes de la actualización.

## Configuraciones Globales Aplicadas

### Global Settings (en schedule_config)
- `retry_delay_hours`: 1 hora por defecto
- `backup_timeout_minutes`: 0 (sin límite) por defecto
- `min_backup_interval_minutes`: 10 minutos por defecto
- `min_free_space_mb`: 100 MB por defecto

### Backup Options
- `compression_level`: 6 (balanceado)
- `include_subdirectories`: true
- `preserve_directory_structure`: true
- `hash_algorithm`: "md5"
- `hash_includes`: ["timestamp", "size"]
- `backup_type`: "complete"
- `process_priority`: "low"
- `sequential_execution`: true
- `filename_format`: "HH-MM-SS_projects.zip"
- `date_format`: "YYYY-MM-DD"

## Verificación
Se realizaron pruebas que confirmaron:

1. ✅ **Proyectos existentes actualizados**: Los 158 proyectos existentes ahora tienen todas las configuraciones globales
2. ✅ **Nuevos proyectos manuales**: Reciben automáticamente todas las configuraciones globales
3. ✅ **Nuevos proyectos S7P**: También reciben automáticamente todas las configuraciones globales

## Beneficios
- **Consistencia**: Todos los proyectos ahora heredan las mismas configuraciones globales
- **Mantenibilidad**: Cambios en configuraciones globales se aplican a futuros proyectos
- **Flexibilidad**: Cada proyecto mantiene sus configuraciones individuales que pueden ser modificadas independientemente
- **Retrocompatibilidad**: Los proyectos existentes mantienen sus configuraciones actuales mientras reciben las nuevas

## Archivos Modificados
- `src/services/project_discovery_service.py`: Nuevo método `_apply_global_configurations()`
- `src/models/project_model.py`: Expansión del modelo Project para manejar configuraciones adicionales
- `projects.json`: Actualizado con configuraciones globales para todos los proyectos existentes
- `projects.json.backup`: Backup de seguridad creado automáticamente
