package email

import (
	"context"
	"errors"
	"fmt"

	"github.com/Gleipnir-Technology/nidus-sync/db/enums"
	"github.com/rs/zerolog/log"
)

type Job interface {
	destination() string
	messageType() enums.CommsMessagetypeemail
	renderHTML() (string, error)
	renderTXT() (string, error)
	subject() string
}

type jobEmailBase struct {
	destination string
	source      string
}

func Handle(ctx context.Context, job Job) error {
	var err error
	log.Debug().Str("dest", job.destination()).Str("type", string(job.messageType())).Msg("Handling email job")
	switch job.messageType() {
	case enums.CommsMessagetypeemailReportSubscriptionConfirmation:
		return errors.New("ReportSubscription has been deprecated.")
	case enums.CommsMessagetypeemailReportNotificationConfirmation:
		err = sendEmailReportConfirmation(ctx, job)
	default:
		return errors.New("not implemented")
	}
	if err != nil {
		log.Error().Err(err).Str("dest", job.destination()).Str("type", string(job.messageType())).Msg("Error processing email")
		return fmt.Errorf("Failed to handle email: %w", err)
	}
	return nil
}
