package cvt

import (
	"encoding/json"
	"fmt"
	"strings"

	msgent "github.com/tidbcloud/devops/entity/message"
	"github.com/tidbcloud/devops/models/base"
	msgmod "github.com/tidbcloud/devops/models/message"
)

type e2m struct{}

func (cvt e2m) EmailRecord(e *msgent.EmailRecord) *msgmod.EmailRecord {
	m := &msgmod.EmailRecord{
		Base:      base.Base{ID: base.ID(e.ID)},
		Name:      e.Name,
		Reason:    e.Reason,
		Applicant: e.Applicant,
	}

	var err error
	// target
	{
		if e.ToTarget != nil {
			m.ToTarget, err = json.Marshal(e.ToTarget)
			if err != nil {
				panic(fmt.Errorf("failed to marshal: %v", err))
			}
		}
		if e.CCTarget != nil {
			m.CCTarget, err = json.Marshal(e.CCTarget)
			if err != nil {
				panic(fmt.Errorf("failed to marshal: %v", err))
			}
		}
	}
	// email template
	{
		m.EmailTemplateID = e.EmailTemplate.ID
		m.EmailTemplateVars, err = json.Marshal(e.EmailTemplate.Variables)
		if err != nil {
			panic(fmt.Errorf("failed to marshal: %v", err))
		}
	}
	// addresses
	{
		m.FromAddress = e.FromAddress
		m.ToAddresses = strings.Join(e.ToAddresses, ",")
		m.CCAddresses = strings.Join(e.CCAddresses, ",")
		m.BCCAddresses = strings.Join(e.BCCAddresses, ",")
	}

	return m
}
