package cryptocli_test

import (
	"context"
	"strings"
	"testing"

	"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/cryptocli"
)

// TestStubProviderHealthOK — провайдер stub не лезет в gRPC,
// возвращает информативный Health без ошибки.
func TestStubProviderHealthOK(t *testing.T) {
	cli := cryptocli.New(cryptocli.Config{Provider: cryptocli.ProviderStub})
	defer cli.Close()
	h, err := cli.Health(context.Background())
	if err != nil {
		t.Fatalf("Health: %v", err)
	}
	if h.Provider != string(cryptocli.ProviderStub) {
		t.Errorf("Provider = %q, ожидался stub", h.Provider)
	}
	if !strings.Contains(h.Message, "stub") {
		t.Errorf("сообщение не содержит 'stub': %q", h.Message)
	}
}

// TestValidataProviderNoSocket — провайдер validata пытается дойти до
// сайдкара, но в тестах сокета нет. gRPC-клиент создаётся лениво
// (NewClient не возвращает ошибку), а ошибка приходит при первом RPC.
func TestValidataProviderNoSocket(t *testing.T) {
	cli := cryptocli.New(cryptocli.Config{
		Provider:   cryptocli.ProviderValidata,
		SocketPath: "/nonexistent/crypto.sock",
	})
	defer cli.Close()
	_, err := cli.Health(context.Background())
	if err == nil {
		t.Fatal("ожидалась ошибка о недоступном сокете")
	}
}

// TestDefaultModulePath — информативный текст для UI.
func TestDefaultModulePath(t *testing.T) {
	if cryptocli.DefaultModulePath(cryptocli.ProviderStub) != "" {
		t.Error("DefaultModulePath(stub) должен быть пустым")
	}
	v := cryptocli.DefaultModulePath(cryptocli.ProviderValidata)
	if v == "" {
		t.Error("DefaultModulePath(validata) не должен быть пустым")
	}
}
