package service

import (
	"context"
	"encoding/json"

	"finance-portal/internal/dataplatform/store"
	"finance-portal/pkg/log"
)

type HealthCheckSrv interface {
	HealthCheck(c context.Context) error
}

type healthCheckService struct {
	store store.Factory
}

var _ HealthCheckSrv = (*healthCheckService)(nil)

func newHealthCheck(srv *service) *healthCheckService {
	return &healthCheckService{
		store: srv.store,
	}
}

func (s *healthCheckService) HealthCheck(c context.Context) error {
	records, err := s.store.WebView().ListAll()
	if err != nil {
		log.L(c).Errorf("failed to list all health check records: %v", err)

		SendAlertMsg(c, err)

		return err
	}

	log.L(c).Infof("health check records: %v", records)

	return nil
}

type TextMessage struct {
	Text string `json:"text"`
}

func SendAlertMsg(c context.Context, err error) error {
	log.L(c).Errorf("Health check failed: %v", err)

	msg := "Health check failed: " + err.Error()

	ct := TextMessage{
		Text: msg,
	}

	marshal, _ := json.Marshal(ct)

	_, err = SendLarkMsg(c, "user_id", MessageBody{
		MsgType:   "text",
		Content:   string(marshal),
		ReceiveID: "9c7ca79f",
	})
	if err != nil {
		log.L(c).Errorf("error when send lark msg, err: %s", err.Error())
	}

	log.L(c).Infof("send alert message success")

	return err
}
