package infra

import (
	"strings"
	"testing"
)

func TestSSHExec(t *testing.T) {
	conn := skipIfNoSSH(t)

	t.Run("echo simple", func(t *testing.T) {
		stdout, stderr, code, err := SSHExec(conn, "echo hello")
		if err != nil {
			t.Fatalf("SSHExec error: %v", err)
		}
		if code != 0 {
			t.Errorf("exit code = %d, want 0; stderr: %s", code, stderr)
		}
		if strings.TrimSpace(stdout) != "hello" {
			t.Errorf("stdout = %q, want %q", strings.TrimSpace(stdout), "hello")
		}
	})

	t.Run("captura stderr", func(t *testing.T) {
		_, stderr, code, err := SSHExec(conn, "echo error >&2")
		if err != nil {
			t.Fatalf("SSHExec error: %v", err)
		}
		if code != 0 {
			t.Errorf("exit code = %d, want 0", code)
		}
		if !strings.Contains(stderr, "error") {
			t.Errorf("stderr = %q, want contener 'error'", stderr)
		}
	})

	t.Run("exit code no cero", func(t *testing.T) {
		_, _, code, err := SSHExec(conn, "exit 42")
		if err != nil {
			t.Fatalf("SSHExec error: %v", err)
		}
		if code != 42 {
			t.Errorf("exit code = %d, want 42", code)
		}
	})

	t.Run("comando multilinea", func(t *testing.T) {
		stdout, _, code, err := SSHExec(conn, "hostname && uname -s")
		if err != nil {
			t.Fatalf("SSHExec error: %v", err)
		}
		if code != 0 {
			t.Errorf("exit code = %d, want 0", code)
		}
		lines := strings.Split(strings.TrimSpace(stdout), "\n")
		if len(lines) < 2 {
			t.Errorf("esperaba al menos 2 lineas, got %d: %q", len(lines), stdout)
		}
	})
}
