package cluster

import (
	"context"

	globaldedicatedv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/dedicated/v1"
	tidbmgmtservicev1 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_mgmt_service/v1"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

// ShowComponentNodeInfo shows the component node information, including node state, ec2 type, storage type, etc., of each existing node.
//
//	Currently, only o11y metering service calls this API.
func (c *serverImpl) ShowComponentNodeInfo(
	ctx context.Context,
	request *tidbmgmtservicev1.ShowComponentNodeInfoRequest,
) (*tidbmgmtservicev1.ShowComponentNodeInfoResponse, error) {
	if request.ClusterId == 0 {
		return nil, bizerr.New(bizerr.ErrCodeParams, "cluster id is invalid")
	}

	resp, err := c.dedicatedCli.GetComponentNodeInfo(
		ctx,
		&globaldedicatedv1.GetComponentNodeInfoRequest{ClusterId: request.GetClusterId()},
	)
	if err != nil {
		return nil, err
	}

	return &tidbmgmtservicev1.ShowComponentNodeInfoResponse{ComponentNodeInfo: resp.GetComponentNodeInfo()}, nil
}

func (c *serverImpl) CountBillableClusters(
	ctx context.Context,
	request *tidbmgmtservicev1.CountBillableClustersRequest,
) (*tidbmgmtservicev1.CountBillableClustersResponse, error) {
	resp, err := c.dedicatedCli.GetBillableClustersCount(ctx, &globaldedicatedv1.GetBillableClustersCountRequest{
		ProjectId: request.ProjectId,
		StartTime: request.StartTime,
		EndTime:   request.EndTime,
	})
	if err != nil {
		return nil, err
	}

	return &tidbmgmtservicev1.CountBillableClustersResponse{
		BillableClustersCount: resp.BillableClustersCount,
	}, nil
}
