package cvt

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

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

type m2e struct{}

func (cvt m2e) EmailRecord(m *msgmod.EmailRecord) *msgent.EmailRecord {
	e := &msgent.EmailRecord{
		ID:          m.ID.Uint64(),
		Name:        m.Name,
		CreatedAt:   m.CreatedAt.Unix(),
		Reason:      m.Reason,
		Applicant:   m.Applicant,
		ToAddresses: []string{},
	}
	var err error
	// target
	{
		if len(m.ToTarget) != 0 {
			data := &msgent.EmailTarget{}
			err = json.Unmarshal(m.ToTarget, data)
			if err != nil {
				panic(fmt.Errorf("failed to unmarshal: %v", err))
			}
			e.ToTarget = data
		}
		if len(m.CCTarget) != 0 {
			data := &msgent.EmailTarget{}
			err = json.Unmarshal(m.CCTarget, data)
			if err != nil {
				panic(fmt.Errorf("failed to unmarshal: %v", err))
			}
			e.CCTarget = data
		}
	}
	// email template
	{
		e.EmailTemplate.ID = m.EmailTemplateID
		if len(m.EmailTemplateVars) != 0 {
			data := map[string]string{}
			err = json.Unmarshal(m.EmailTemplateVars, &data)
			if err != nil {
				panic(fmt.Errorf("failed to unmarshal: %v", err))
			}
			e.EmailTemplate.Variables = data
		}
	}
	// addresses
	{
		e.FromAddress = m.FromAddress
		if m.ToAddresses != "" {
			e.ToAddresses = strings.Split(m.ToAddresses, ",")
		}
		e.CCAddresses = strings.Split(m.CCAddresses, ",")
		e.BCCAddresses = strings.Split(m.BCCAddresses, ",")
	}

	return e
}
