package apps_test

import (
	"testing"

	"github.com/nexuscrm/tests/contract/ui_api/internal/asserts"
)

func assertAppSummary(t testing.TB, app map[string]any) {
	t.Helper()

	appID := asserts.RequireStringFieldAny(t, app, "appId", "id")
	if appID != "" {
		asserts.RequireSalesforceID(t, appID)
	}

	_ = asserts.RequireStringFieldAny(t, app, "label", "developerName", "name")
	_ = asserts.RequireStringFieldAny(t, app, "appType", "type", "appTypeLabel")

	asserts.RequireStringIfPresent(t, app, "description")
	asserts.RequireStringIfPresent(t, app, "logoUrl")
	asserts.RequireStringIfPresent(t, app, "formFactor")
	asserts.RequireBoolIfPresent(t, app, "hasAccess")
	asserts.RequireBoolIfPresent(t, app, "isDefault")
	asserts.RequireBoolIfPresent(t, app, "isVisible")
	asserts.RequireMapIfPresent(t, app, "theme")
	asserts.RequireSliceIfPresent(t, app, "navItems")
}

func assertNavItems(t testing.TB, items []any) {
	t.Helper()

	for i, entry := range items {
		if i >= 10 {
			break
		}
		item := asserts.RequireMap(t, entry)
		assertNavItem(t, item)
	}
}

func assertNavItem(t testing.TB, item map[string]any) {
	t.Helper()

	_ = asserts.RequireStringFieldAny(t, item, "label", "name")
	_ = asserts.RequireStringFieldAny(t, item, "type", "itemType", "target")
	asserts.RequireStringIfPresent(t, item, "objectApiName")
	asserts.RequireStringIfPresent(t, item, "iconUrl")
	asserts.RequireStringIfPresent(t, item, "url")
	asserts.RequireMapIfPresent(t, item, "pageReference")
	asserts.RequireBoolIfPresent(t, item, "isDefault")

	if idRaw, ok := item["id"].(string); ok && idRaw != "" {
		if len(idRaw) == 15 || len(idRaw) == 18 {
			asserts.RequireSalesforceID(t, idRaw)
		}
	}
}
