package infra

import (
	"fmt"
	"os"
	"path/filepath"
)

// SSHConfigWrite escribe la lista de entries al archivo ~/.ssh/config.
// Crea un backup (.config.bak) antes de sobrescribir si el archivo ya existe.
// Crea el directorio ~/.ssh si no existe.
func SSHConfigWrite(entries []SSHConfigEntry) error {
	sshDir := filepath.Join(os.Getenv("HOME"), ".ssh")
	configPath := filepath.Join(sshDir, "config")
	backupPath := filepath.Join(sshDir, "config.bak")

	if err := os.MkdirAll(sshDir, 0700); err != nil {
		return fmt.Errorf("ssh config write: create dir: %w", err)
	}

	// Backup si existe
	if data, err := os.ReadFile(configPath); err == nil {
		if err := os.WriteFile(backupPath, data, 0600); err != nil {
			return fmt.Errorf("ssh config write: backup: %w", err)
		}
	}

	content := SSHConfigRender(entries)
	if err := os.WriteFile(configPath, []byte(content), 0600); err != nil {
		return fmt.Errorf("ssh config write: %w", err)
	}
	return nil
}
