package runtimeapi

import (
	"context"

	"github.com/nexuscrm/backend/internal/runtimeprocess"
	"github.com/nexuscrm/records"
	"github.com/nexuscrm/shared/pkg/contract"
	"github.com/nexuscrm/shared/pkg/models"
	accesssemantic "github.com/pingcap-inc/nexuscrm-contract/pkg/runtime/recordaccessv1"
	semantic "github.com/pingcap-inc/nexuscrm-contract/pkg/runtime/recordsv1"
)

// AssembleNonServingBootstrap creates the metadata-independent L0 deployment
// endpoint. It deliberately opens no database and installs no identity
// authority. A stopped activation must replace it with AssembleProduction;
// bootstrap can never become business-ready or act as a fallback.
func AssembleNonServingBootstrap(config ProcessConfig) (*runtimeprocess.Process, error) {
	config.ServingEnabled = false
	config.WorkloadAuthority = RejectingAuthority
	config.SecurityAdmission = NewRejectingSecurityAdmission()
	config.Receipts = ReceiptSourceFunc(BootstrapReceipts)
	return Assemble(config, unavailableReader{})
}

type unavailableReader struct{}

func (unavailableReader) ReadSelectedRecord(context.Context, string, string, []string, *models.UserSession) (*records.SelectedRootRecord, error) {
	return nil, &semantic.Failure{Category: semantic.FailureUnavailable}
}

func (unavailableReader) EvaluateRecordAccess(context.Context, *string, []string, *models.UserSession) (map[string]contract.RecordAccess, error) {
	return nil, &accesssemantic.Failure{Category: accesssemantic.FailureUnavailable}
}
