package grpc_service

import (
	"context"

	"github.com/tidbcloud/config-center/internal/service"
	pb "github.com/tidbcloud/config-center/proto/config_center"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
	"google.golang.org/protobuf/types/known/emptypb"
)

func (s ConfigCenterService) GetComponentImage(ctx context.Context, req *pb.GetComponentImageRequest) (*pb.ComponentImage, error) {
	return service.GetComponentImage(s.DB, req)
}

// todo: rename to forceupdate
func (s ConfigCenterService) UpdateComponentImage(ctx context.Context, req *pb.UpdateComponentImageRequest) (*pb.ComponentImage, error) {
	return s.UnifiedService.UpdateComponentImage(req)
}

func (s ConfigCenterService) ListComponentImages(ctx context.Context, req *pb.ListComponentImagesRequest) (*pb.ListComponentImagesResponse, error) {
	if req.ComponentName == "" {
		return nil, status.Error(codes.InvalidArgument, "component name is required")
	}
	return service.ListComponentImages(s.DB, req)
}

func (s ConfigCenterService) GetDefaultVersion(ctx context.Context, req *pb.GetDefaultVersionRequest) (*pb.DefaultVersion, error) {
	return service.GetDefaultVersion(s.DB, req)
}

func (s ConfigCenterService) UpdateDefaultVersion(ctx context.Context, req *pb.UpdateDefaultVersionRequest) (*pb.DefaultVersion, error) {
	resp, err := s.UnifiedService.UpdateDefaultVersion(req)
	if err != nil {
		return nil, status.Error(codes.Internal, err.Error())
	}
	return resp, nil
}

func (s ConfigCenterService) DeleteDefaultVersion(ctx context.Context, req *pb.DeleteDefaultVersionRequest) (*emptypb.Empty, error) {
	if req.GetCloudProvider() == "" && req.GetTenantId() == 0 {
		return &emptypb.Empty{}, status.Error(codes.InvalidArgument, "cannot unset default version globally")
	}
	return &emptypb.Empty{}, service.DeleteDefaultVersion(s.DB, req)
}

func (s ConfigCenterService) ListDefaultVersionRules(ctx context.Context, req *pb.ListDefaultVersionRulesRequest) (*pb.ListDefaultVersionRulesResponse, error) {
	return service.ListDefaultVersionRules(s.DB, req)
}
