package userbehavior

import (
	"github.com/tidbcloud/devops/api"
	"github.com/tidbcloud/devops/entity"
	ubent "github.com/tidbcloud/devops/entity/userbehavior"
)

type GetSubscriptionReq struct {
	ID uint64 `form:"id" json:"id"`
}

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

	Subscription *ubent.Subscription `json:"subscription"`
}

type ListSubscriptionsReq struct {
	api.PaginationReq

	Type      *string `form:"type"`
	Applicant *string `form:"applicant"`
	ClusterID *string `form:"cluster_id"`

	ShowUnaccessible *bool `form:"show_unaccessible"`

	FilterByCreator *bool `json:"filter_by_creator"`
}

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

	Total         int64                 `json:"total"`
	Subscriptions []*ubent.Subscription `json:"items"`
}

type CreateSubscriptionReq struct {
	Name          string                       `json:"name"`
	SubscribeType ubent.SubscribeTp            `json:"subscribe_type"`
	LarkChats     []*entity.LarkChatSimplified `json:"lark_chats"`
	EventType     ubent.UBEventTp              `json:"event_type"`
	Template      string                       `json:"template"`
	Selector      ubent.SelectorTp             `json:"selector"`
	DetailLink    *string                      `json:"detail_link"`
}

type CreateSubscriptionResp struct {
	api.BaseResp

	SubscriptionID *uint64 `json:"subscription_id"`
}

type EditSubscriptionReq struct {
	Name          string                       `json:"name"`
	SubscribeType ubent.SubscribeTp            `json:"subscribe_type"`
	LarkChats     []*entity.LarkChatSimplified `json:"lark_chats"`
	EventType     ubent.UBEventTp              `json:"event_type"`
	Template      string                       `json:"template"`
	Selector      ubent.SelectorTp             `json:"selector"`
}

type EditSubscriptionResp struct {
	api.BaseResp

	SubscriptionID *uint64 `json:"subscription_id"`
}

type DeleteSubscriptionReq struct {
}

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

type SendMockEventToSubscriptionReq struct {
}

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

type ListLarkChatOptionsReq struct {
}

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

	Total           int64                        `json:"total"`
	LarkChatOptions []*entity.LarkChatSimplified `json:"items"`
}

type AddExternalLarkChatReq struct {
	ChatURL string  `json:"chat_url" binding:"required"`
	Name    string  `json:"name" binding:"required"`
	Avatar  *string `json:"avatar"`
}

type SuppressGTMEmailReq struct {
	TenantID     uint64 `json:"tenant_id" binding:"required"`
	CampaignName string `json:"campaign_name" binding:"required"`
	Source       string `json:"source" binding:"required"`
	Reason       string `json:"reason" binding:"required"`
}

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

	Status         string `json:"status"`
	CancelledCount int64  `json:"cancelled_count"`
}
