package app

import (
	"context"

	apiv1 "github.com/tidbcloud/cluster-service-ng/api/cluster-service-ng/v1beta"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
	"google.golang.org/protobuf/types/known/emptypb"
)

const autoscalePolicyQuarantineMessage = "autoscale policy is disabled by configuration"

// autoscalePolicyQuarantineServer preserves the wire surface while policy
// evaluation and mutation are disabled.
type autoscalePolicyQuarantineServer struct {
	apiv1.UnimplementedAutoscalePolicyServiceServer
}

var _ apiv1.AutoscalePolicyServiceServer = (*autoscalePolicyQuarantineServer)(nil)

func autoscalePolicyQuarantineError() error {
	return status.Error(codes.FailedPrecondition, autoscalePolicyQuarantineMessage)
}

func (*autoscalePolicyQuarantineServer) GetResolvedAutoscalePolicyBundle(
	context.Context,
	*apiv1.GetResolvedAutoscalePolicyBundleRequest,
) (*apiv1.ResolvedAutoscalePolicyBundle, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) ApplyMaterializedAutoscalePolicies(
	context.Context,
	*apiv1.ApplyMaterializedAutoscalePoliciesRequest,
) (*apiv1.ApplyMaterializedAutoscalePoliciesResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) EvaluateAutoscalePolicy(
	context.Context,
	*apiv1.EvaluateAutoscalePolicyRequest,
) (*apiv1.EvaluateAutoscalePolicyResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) ListAutoscalePolicies(
	context.Context,
	*apiv1.ListAutoscalePoliciesRequest,
) (*apiv1.ListAutoscalePoliciesResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) UpsertAutoscaleRuntimeGuard(
	context.Context,
	*apiv1.UpsertAutoscaleRuntimeGuardRequest,
) (*apiv1.AutoscaleRuntimeGuard, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) DeleteAutoscaleRuntimeGuard(
	context.Context,
	*apiv1.DeleteAutoscaleRuntimeGuardRequest,
) (*emptypb.Empty, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) ListAutoscaleRuntimeGuards(
	context.Context,
	*apiv1.ListAutoscaleRuntimeGuardsRequest,
) (*apiv1.ListAutoscaleRuntimeGuardsResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) CreateOrReplaceAutoscalePolicy(
	context.Context,
	*apiv1.CreateOrReplaceAutoscalePolicyRequest,
) (*apiv1.AutoscalePolicyResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) PatchAutoscalePolicy(
	context.Context,
	*apiv1.PatchAutoscalePolicyRequest,
) (*apiv1.AutoscalePolicyResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) GetAutoscalePolicy(
	context.Context,
	*apiv1.GetAutoscalePolicyRequest,
) (*apiv1.GetAutoscalePolicyResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) GetEffectiveAutoscalePolicy(
	context.Context,
	*apiv1.GetEffectiveAutoscalePolicyRequest,
) (*apiv1.GetAutoscalePolicyResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) ListAutoscalePolicy(
	context.Context,
	*apiv1.ListAutoscalePolicyRequest,
) (*apiv1.ListAutoscalePolicyResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) PreviewAutoscalePolicy(
	context.Context,
	*apiv1.PreviewAutoscalePolicyRequest,
) (*apiv1.PreviewAutoscalePolicyResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}

func (*autoscalePolicyQuarantineServer) SyncAutoscalePolicy(
	context.Context,
	*apiv1.SyncAutoscalePolicyRequest,
) (*apiv1.AutoscalePolicyResponse, error) {
	return nil, autoscalePolicyQuarantineError()
}
