package otherperson

import (
	"context"
	"errors"
)

// Sentinel errors returned by the service so the transport layer can map them to the
// right HTTP status without depending on GORM internals.
var (
	ErrNameRequired = errors.New("name is required")
	ErrNotFound     = errors.New("other person not found")
	ErrDuplicate    = errors.New("another other person with the same name, mobile phone and email already exists")
)

type Service interface {
	Create(ctx context.Context, p *OtherPerson) error
	Update(ctx context.Context, p *OtherPerson) error
	Delete(ctx context.Context, id, actor []byte) error
	GetByID(ctx context.Context, id []byte) (*OtherPerson, error)
	Search(ctx context.Context, q string, limit, offset int) ([]OtherPerson, int64, error)
	Upsert(ctx context.Context, p *OtherPerson) error
}
