package proxmox

import (
	"context"
	"io"
	"net/http"
	"strings"
	"testing"
)

// RestoreLXC sends pool= only when Pool is set. Under a pool-scoped token the restore MUST carry
// pool=felhom (else VM.Allocate/Pool.Allocate 403); with Pool empty it MUST be omitted (a naive
// unconditional Set would send an empty pool= — omit-when-empty is the guarantee).
func TestRestoreLXC_PoolParam(t *testing.T) {
	var body string
	d := &mockDoer{fn: func(r *http.Request) (*http.Response, error) {
		b, _ := io.ReadAll(r.Body)
		body = string(b)
		return jsonResp(200, `{"data":"`+testUPID+`"}`), nil
	}}
	c := newTestClient(d)
	ctx := context.Background()

	// Pool set → pool=felhom present in the POST body.
	if _, err := c.RestoreLXC(ctx, RestoreLXCOptions{VMID: 9100, Archive: "local:backup/a.tar.zst", Storage: "local-lvm", Pool: "felhom"}); err != nil {
		t.Fatalf("RestoreLXC(Pool): %v", err)
	}
	if !strings.Contains(body, "pool=felhom") {
		t.Errorf("Pool set: expected pool=felhom in body, got %q", body)
	}

	// Pool empty → NO pool key at all (omit-when-empty).
	if _, err := c.RestoreLXC(ctx, RestoreLXCOptions{VMID: 9100, Archive: "local:backup/a.tar.zst", Storage: "local-lvm"}); err != nil {
		t.Fatalf("RestoreLXC(no Pool): %v", err)
	}
	if strings.Contains(body, "pool=") {
		t.Errorf("Pool empty: pool key must be ABSENT, got %q", body)
	}
}
