//! Startup Simple - Ejemplo de uso del wizard para una startup simple
//!
//! Este ejemplo muestra cómo una startup con requirements simples
//! se beneficia más del wizard simple (Rust puro)

use std::collections::HashMap;

/// Configuración típica de una startup simple
#[derive(Debug)]
pub struct StartupConfig {
    pub app_name: String,
    pub environment: String,
    pub features: Vec<String>,
    pub database_url: String,
    pub port: u16,
}

/// Ejemplo de configuración con wizard simple
pub fn configure_with_simple_wizard() -> StartupConfig {
    // ✅ VENTAJAS del wizard simple para startup:

    // 1. Rápido de configurar (< 2 minutos)
    // 2. Sin dependencias extra
    // 3. Binario pequeño para despliegue
    // 4. Configuración predecible

    println!("=== Configuración Simple para Startup ===");

    // Requirements típicos de startup:
    let typical_features = vec![
        "auth".to_string(),       // Autenticación básica
        "content-db".to_string(), // Base de datos simple
        "email".to_string(),      // Notificaciones básicas
    ];

    // Configuración directa, sin complicaciones
    StartupConfig {
        app_name: "MyStartup".to_string(),
        environment: "dev".to_string(),
        features: typical_features,
        database_url: "sqlite:startup.db".to_string(),
        port: 3030,
    }
}

/// Lo que NO necesita una startup simple
pub fn what_startup_doesnt_need() {
    println!("❌ Una startup simple NO necesita:");
    println!("- Configuraciones dinámicas complejas");
    println!("- Scripts personalizables");
    println!("- Múltiples flujos de configuración");
    println!("- Integración con 20+ servicios externos");
    println!("- Lógica de configuración que cambia diariamente");
}

/// Métricas de rendimiento para startup
pub fn performance_metrics() {
    println!("📊 Métricas con wizard simple:");
    println!("- Tiempo de configuración: ~90 segundos");
    println!("- Tamaño del binario: +200KB");
    println!("- Tiempo de startup: <100ms");
    println!("- Memoria adicional: <1MB");
}

/// Flujo típico de configuración para startup
pub fn typical_startup_flow() {
    println!("🚀 Flujo típico de configuración:");
    println!("1. Seleccionar features básicas (auth, db, email)");
    println!("2. Configurar base de datos SQLite");
    println!("3. Configurar email con servicio gratuito");
    println!("4. Usar defaults para todo lo demás");
    println!("5. Desplegar rápidamente");
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_startup_config() {
        let config = configure_with_simple_wizard();

        // Validar que tiene lo esencial
        assert!(config.features.contains(&"auth".to_string()));
        assert!(config.features.contains(&"content-db".to_string()));
        assert!(config.features.contains(&"email".to_string()));

        // Validar que no tiene features complejas
        assert!(!config.features.contains(&"rbac".to_string()));
        assert!(!config.features.contains(&"metrics".to_string()));
        assert!(!config.features.contains(&"tls".to_string()));
    }

    #[test]
    fn test_simple_is_fast() {
        let start = std::time::Instant::now();
        let _config = configure_with_simple_wizard();
        let duration = start.elapsed();

        // Debe ser muy rápido
        assert!(duration.as_millis() < 100);
    }
}

// Ejemplo de uso
fn main() {
    println!("🎯 Ejemplo: Startup Simple");
    println!("==========================");

    let config = configure_with_simple_wizard();
    println!("✅ Configuración generada: {:?}", config);

    what_startup_doesnt_need();
    performance_metrics();
    typical_startup_flow();

    println!("\n🎉 Resultado: Wizard simple es PERFECTO para este caso");
}
