package core

import (
	"bytes"
	"log"
	"strings"
	"testing"
)

// TestCaptureLogs redirige log.SetOutput a un buffer y retorna el buffer
// mas una funcion que restaura el writer original y devuelve las lineas capturadas.
// Registra t.Cleanup para restauracion automatica.
func TestCaptureLogs(t *testing.T) (*bytes.Buffer, func() []string) {
	t.Helper()

	var buf bytes.Buffer
	originalFlags := log.Flags()
	originalOutput := log.Writer()

	log.SetOutput(&buf)
	log.SetFlags(0) // sin timestamp para facilitar asserts

	restore := func() []string {
		log.SetOutput(originalOutput)
		log.SetFlags(originalFlags)

		raw := buf.String()
		if raw == "" {
			return nil
		}
		lines := strings.Split(strings.TrimRight(raw, "\n"), "\n")
		return lines
	}

	t.Cleanup(func() { restore() })

	return &buf, restore
}
