package notify

import (
	"context"

	larkutil "github.com/tidbcloud/devops/pkg/infra/clients/larkcli/util"
)

type IncidentToDoActionTCOCPCreatedParam struct {
	IncidentName string
	IncidentLink string
	ActionTitle  string
	DueTime      string
	TCOCPLink    string
	TCOCPKey     string
	OwnerEmail   string
}

func (m IncidentToDoActionTCOCPCreatedParam) Message(cards MessageCardSet) (larkutil.IMMessage, error) {
	return larkutil.IMMessageCardTemplate{
		MType: "template",
		Data: larkutil.IMMessageCardTemplateData{
			ID: cards.IncidentToDoActionTCOCPCreated,
			Vars: map[string]string{
				"incident_name": m.IncidentName,
				"incident_link": m.IncidentLink,
				"action_title":  m.ActionTitle,
				"due_time":      m.DueTime,
				"tcocp_link":    m.TCOCPLink,
				"tcocp_key":     m.TCOCPKey,
				"owner_email":   m.OwnerEmail,
			},
		},
	}, nil
}

type IncidentToDoActionOverdueParam struct {
	ActionTitle  string
	Status       string
	DueTime      string
	IncidentName string
	OwnerEmail   string
	IncidentLink string
	TCOCPKey     string
	TCOCPLink    string
}

func (m IncidentToDoActionOverdueParam) Message(cards MessageCardSet) (larkutil.IMMessage, error) {
	return larkutil.IMMessageCardTemplate{
		MType: "template",
		Data: larkutil.IMMessageCardTemplateData{
			ID: cards.IncidentToDoActionOverdue,
			Vars: map[string]string{
				"action_title":  m.ActionTitle,
				"status":        m.Status,
				"due_time":      m.DueTime,
				"incident_name": m.IncidentName,
				"owner_email":   m.OwnerEmail,
				"incident_link": m.IncidentLink,
				"tcocp_key":     m.TCOCPKey,
				"tcocp_link":    m.TCOCPLink,
			},
		},
	}, nil
}

type IncidentToDoActionOverdueSummaryParam struct {
	IncidentName string
	IncidentLink string
	ActionCount  string
	ActionItems  string
}

func (m IncidentToDoActionOverdueSummaryParam) Message(cards MessageCardSet) (larkutil.IMMessage, error) {
	return larkutil.IMMessageCardTemplate{
		MType: "template",
		Data: larkutil.IMMessageCardTemplateData{
			ID: cards.IncidentToDoActionOverdueSummary,
			Vars: map[string]string{
				"incident_name": m.IncidentName,
				"incident_link": m.IncidentLink,
				"action_count":  m.ActionCount,
				"action_items":  m.ActionItems,
			},
		},
	}, nil
}

func (c *client) IncidentToDoActionOverdue(ctx context.Context, email string, param IncidentToDoActionOverdueParam) (*string, error) {
	return c.SendMessage(ctx, ReceiveTypeEmail, email, param)
}

func (c *client) IncidentToDoActionTCOCPCreated(ctx context.Context, email string, param IncidentToDoActionTCOCPCreatedParam) (*string, error) {
	return c.SendMessage(ctx, ReceiveTypeEmail, email, param)
}

func (c *client) IncidentToDoActionOverdueSummary(ctx context.Context, email string, param IncidentToDoActionOverdueSummaryParam) (*string, error) {
	return c.SendMessage(ctx, ReceiveTypeEmail, email, param)
}
