package v1

import (
	"context"

	"github.com/pingcap-inc/pingcat/internal/apiserver/store"
	v1 "github.com/pingcap-inc/pingcat/model/v1"

	"github.com/pingcap-inc/pchub/pkg/errors"
	"github.com/pingcap-inc/pchub/pkg/log"
)

type UserService struct {
	store store.Factory
}

type UserSrv interface {
	GetUserByEmail(ctx context.Context, email string) (*v1.User, error)
}

var _ UserSrv = (*UserService)(nil)

func NewUser(store store.Factory) *UserService {
	return &UserService{store: store}
}

func (s *UserService) GetUserByEmail(ctx context.Context, email string) (*v1.User, error) {
	log.L(ctx).Info("UserService.GetUserByEmail function called.")

	user, err := s.store.User().GetByEmail(ctx, email)
	if err != nil {
		log.L(ctx).Error(errors.Wrap(err, "Error when get user from db").Error())

		return nil, err
	}

	return user, nil
}
