package report

import (
	"testing"

	"gitea.dooplex.hu/admin/felhom-controller/internal/settings"
)

// buildGeoRestrictionReport must ALWAYS return a non-nil, present-but-disabled report for
// a nil input. The old inline code left Report.GeoRestriction nil (omitempty), which made
// the hub hide the whole geo section for a never-configured controller — this test fails
// against that old behaviour (companion).
func TestBuildGeoRestrictionReport_NilIsPresentAndDisabled(t *testing.T) {
	gr := buildGeoRestrictionReport(nil)
	if gr == nil {
		t.Fatal("geo report is nil for nil input — the hub would omit the section")
	}
	if gr.Enabled {
		t.Fatalf("Enabled = true, want false for nil input")
	}
	if gr.AllowedCountries == nil {
		t.Fatalf("AllowedCountries is nil, want empty non-nil slice (renders as [], not null)")
	}
}

func TestBuildGeoRestrictionReport_PopulatedPassesThrough(t *testing.T) {
	in := &settings.GeoRestriction{Enabled: true, AllowedCountries: []string{"HU", "DE"}}
	gr := buildGeoRestrictionReport(in)
	if gr == nil || !gr.Enabled || len(gr.AllowedCountries) != 2 {
		t.Fatalf("passthrough failed: %+v", gr)
	}
}

// A disabled config with a nil country list must still yield an empty (non-nil) list.
func TestBuildGeoRestrictionReport_DisabledNilCountries(t *testing.T) {
	gr := buildGeoRestrictionReport(&settings.GeoRestriction{Enabled: false})
	if gr == nil || gr.Enabled || gr.AllowedCountries == nil {
		t.Fatalf("disabled report wrong: %+v", gr)
	}
}
