package externallarkcli

import (
	"context"
	"fmt"
	"net/http"
	"time"

	"github.com/go-resty/resty/v2"
)

type larkcli struct {
	httpCli *resty.Client
}

func (cli *larkcli) SendCard(ctx context.Context, chatURL string, cardContent string) error {
	req := CreateCardReq{
		MsgType: "interactive",
		Card:    cardContent,
	}
	resp := CreateCardResp{}
	_, err := cli.httpCli.R().
		SetContext(ctx).
		SetBody(req).
		SetResult(&resp).
		Post(chatURL)
	return err
}

func (cli *larkcli) SendMessage(ctx context.Context, chatURL string, message string) error {
	req := CreateMessageReq{
		MsgType: "text",
		Content: MessageContent{Text: message},
	}
	resp := CreateCardResp{}
	_, err := cli.httpCli.R().
		SetContext(ctx).
		SetBody(req).
		SetResult(&resp).
		Post(chatURL)

	return err
}

func NewExternalLarkCli() ExternalLarkCli {
	httpCli := resty.New().
		SetTransport(http.DefaultTransport).
		SetTimeout(10 * time.Second).
		OnAfterResponse(func(c *resty.Client, r *resty.Response) error {
			if !r.IsSuccess() {
				return fmt.Errorf("status: %s, body: %s", r.Status(), string(r.Body()))
			}
			return nil
		})
	return &larkcli{httpCli: httpCli}
}
