package sfcrmappservice

import sessionsemantic "github.com/pingcap-inc/nexuscrm-contract/pkg/runtime/sessionv1"

// limitRows preserves the migrated dialect response. Configured overrides are
// supplied by Runtime only when the authenticated session has a rate subject.
func limitRows(policy *sessionsemantic.DocumentPolicy) map[string]any {
	rows := standardLimitRows()
	if policy.HourlyLimit > 0 && policy.DailyLimit > 0 {
		rows["HourlyApiRequests"] = map[string]any{"Max": policy.HourlyLimit, "Remaining": policy.HourlyLimit}
		rows["DailyApiRequests"] = map[string]any{"Max": policy.DailyLimit, "Remaining": policy.DailyLimit}
	}
	return rows
}

// standardLimitRows is the old dialect's compatibility document, now owned
// only by AppService. These fixed Remaining values are not live usage counters.
func standardLimitRows() map[string]any {
	return map[string]any{
		"DailyApiRequests": map[string]any{
			"Max":       100000,
			"Remaining": 99000,
		},
		"DailyAsyncApexExecutions": map[string]any{
			"Max":       250000,
			"Remaining": 250000,
		},
		"DailyBulkApiRequests": map[string]any{
			"Max":       10000,
			"Remaining": 10000,
		},
		"DailyBulkV2QueryJobs": map[string]any{
			"Max":       1000,
			"Remaining": 1000,
		},
		"DailyStreamingApiEvents": map[string]any{
			"Max":       200000,
			"Remaining": 200000,
		},
		"DataStorageMB": map[string]any{
			"Max":       5000,
			"Remaining": 4900,
		},
		"FileStorageMB": map[string]any{
			"Max":       10000,
			"Remaining": 9900,
		},
		"HourlyDashboardRefreshes": map[string]any{
			"Max":       200,
			"Remaining": 200,
		},
		"HourlyDashboardResults": map[string]any{
			"Max":       5000,
			"Remaining": 5000,
		},
		"HourlyDashboardStatuses": map[string]any{
			"Max":       999999999,
			"Remaining": 999999999,
		},
		"HourlyODataCallout": map[string]any{
			"Max":       10000,
			"Remaining": 10000,
		},
		"HourlySyncReportRuns": map[string]any{
			"Max":       500,
			"Remaining": 500,
		},
		"HourlyTimeBasedWorkflow": map[string]any{
			"Max":       1000,
			"Remaining": 1000,
		},
		"MassEmail": map[string]any{
			"Max":       5000,
			"Remaining": 5000,
		},
		"SingleEmail": map[string]any{
			"Max":       5000,
			"Remaining": 5000,
		},
		"StreamingApiConcurrentClients": map[string]any{
			"Max":       2000,
			"Remaining": 2000,
		},
	}
}
