package cluster

import (
	"github.com/tidbcloud/devops/api"
	maintent "github.com/tidbcloud/devops/entity/maintenance"
)

type ListClusterOpsMaintenanceWindowsReq struct {
	api.PaginationReq

	ClusterIDs []string `form:"cluster_ids"`
}

type ListClusterOpsMaintenanceWindowsResp struct {
	api.BaseResp `json:",inline"`

	Items []*maintent.ClusterOpsMaintenanceWindow `json:"items"`
	Total int64                                   `json:"total"`
}

type GetClusterOpsMaintenanceWindowResp struct {
	api.BaseResp `json:",inline"`

	Item *maintent.ClusterOpsMaintenanceWindow `json:"item"`
}

type CreateClusterOpsMaintenanceWindowReq struct {
	ClusterID string                                     `json:"cluster_id" binding:"required"`
	Windows   []maintent.ClusterOpsMaintenanceWindowSlot `json:"windows" binding:"required"`
	Approvers []string                                   `json:"approvers"`
}

type CreateClusterOpsMaintenanceWindowResp struct {
	api.BaseResp `json:",inline"`

	Item *maintent.ClusterOpsMaintenanceWindow `json:"item"`
}

type UpdateClusterOpsMaintenanceWindowReq struct {
	Windows   []maintent.ClusterOpsMaintenanceWindowSlot `json:"windows" binding:"required"`
	Approvers []string                                   `json:"approvers"`
}

type UpdateClusterOpsMaintenanceWindowResp struct {
	api.BaseResp `json:",inline"`

	Item *maintent.ClusterOpsMaintenanceWindow `json:"item"`
}

type IsInClusterOpsMaintenanceWindowReq struct {
	// ExecuteTimes are execute times as Unix timestamps in seconds. It supports repeated query keys and comma-separated values. If omitted, current server time is used.
	ExecuteTimes []int64 `form:"execute_times"`
}

type IsInClusterOpsMaintenanceWindowResp struct {
	api.BaseResp `json:",inline"`

	// Is indicates whether the cluster is currently in ops maintenance window or no corresponding maintenance window.
	Is bool `json:"is"`
	// Item is the maintenance window if exists.
	Item *maintent.ClusterOpsMaintenanceWindow `json:"window,omitempty"`
}
