package maintenancewindow

import (
	"context"

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

func (svc *service) QueryMaintenanceTaskExecutions(
	ctx context.Context,
	req *tidbmgmtservicev1.QueryMaintenanceTaskExecutionsRequest,
) (*tidbmgmtservicev1.QueryMaintenanceTaskExecutionsResponse, bizerr.BizError) {
	ctx, span := tracer.Start(ctx, "QueryMaintenanceTaskExecutionsSvc")
	defer span.End()

	if err := svc.checkQueryMaintenanceTaskExecutions(req); err != nil {
		return nil, err
	}

	executions, err := svc.mteRepo.Query(ctx, req.GetFilter(), nil)
	if err != nil {
		return nil, err
	}

	return &tidbmgmtservicev1.QueryMaintenanceTaskExecutionsResponse{MaintenanceTaskExecutions: executions}, nil
}

func (svc *service) checkQueryMaintenanceTaskExecutions(
	req *tidbmgmtservicev1.QueryMaintenanceTaskExecutionsRequest,
) bizerr.BizError {
	if len(req.GetFilter().GetClusterIds()) == 0 && len(req.GetFilter().GetStates()) == 0 &&
		len(
			req.GetFilter().GetMaintenanceTaskIds(),
		) == 0 && len(req.GetFilter().GetMaintenanceTaskExecutionIds()) == 0 {
		return bizerr.New(bizerr.ErrCodeParams, "filter is required")
	}
	return nil
}
