vh 0.1.1

VHost manager for local development.
use crate::types::DomainConfig;

pub struct DomainDescriptor;

impl DomainDescriptor {
    pub fn print(domain: &DomainConfig) {
        let short_id: String = domain.id.chars().take(8).collect();
        
        println!("[DOMAIN DETAILS]");
        println!("{:<20} {}", "ID:", short_id);
        println!("{:<20} {}", "Name:", domain.name);
        println!("{:<20} {}", "Domain:", domain.domain);
        println!("{:<20} {}", "IP Address:", domain.ip);
        println!("{:<20} {}", "Created At:", domain.created_at.format("%Y-%m-%d %H:%M:%S"));
        
        println!("\n[CERTIFICATES]");
        println!("{:<20} {}", "Certificate Path:", domain.cert_path.display());
        println!("{:<20} {}", "Private Key Path:", domain.key_path.display());
        
        println!("\n[SERVER CONFIGURATION EXAMPLES]");
        println!("Use these absolute paths in your local web servers to enable HTTPS.");

        println!("\n-- Nginx --");
        println!("server {{");
        println!("    listen 443 ssl;");
        println!("    server_name {};", domain.domain);
        println!("    ssl_certificate {};", domain.cert_path.display());
        println!("    ssl_certificate_key {};", domain.key_path.display());
        println!("    ...");
        println!("}}");

        println!("\n-- Apache --");
        println!("<VirtualHost *:443>");
        println!("    ServerName {}", domain.domain);
        println!("    SSLEngine on");
        println!("    SSLCertificateFile \"{}\"", domain.cert_path.display());
        println!("    SSLCertificateKeyFile \"{}\"", domain.key_path.display());
        println!("    ...");
        println!("</VirtualHost>");

        println!("\n-- Node.js (Express / HTTPS) --");
        println!("const https = require('https');");
        println!("const fs = require('fs');");
        println!("const options = {{");
        println!("    key: fs.readFileSync('{}'),", domain.key_path.display());
        println!("    cert: fs.readFileSync('{}')", domain.cert_path.display());
        println!("}};");
        println!("https.createServer(options, app).listen(443);");

        println!("\n-- Python (FastAPI / Uvicorn) --");
        println!("uvicorn main:app --port 443 \\");
        println!("  --ssl-keyfile \"{}\" \\", domain.key_path.display());
        println!("  --ssl-certfile \"{}\"", domain.cert_path.display());
        
        println!("\n-- Go (net/http) --");
        println!("log.Fatal(http.ListenAndServeTLS(\":443\", \"{}\", \"{}\", handler))", 
            domain.cert_path.display(), 
            domain.key_path.display()
        );
    }
}