package storage

import (
	"context"

	"github.com/tech/sendico/billing/documents/storage/model"
)

type storageError string

func (e storageError) Error() string {
	return string(e)
}

var (
	ErrDocumentNotFound  = storageError("billing.documents.storage: document record not found")
	ErrDuplicateDocument = storageError("billing.documents.storage: duplicate document record")
)

// Repository defines the root storage contract for the billing documents service.
type Repository interface {
	Ping(ctx context.Context) error
	Documents() DocumentsStore
}

// DocumentsStore exposes persistence operations for document records.
type DocumentsStore interface {
	Create(ctx context.Context, record *model.DocumentRecord) error
	Update(ctx context.Context, record *model.DocumentRecord) error
	GetByPaymentRef(ctx context.Context, paymentRef string) (*model.DocumentRecord, error)
	ListByPaymentRefs(ctx context.Context, paymentRefs []string) ([]*model.DocumentRecord, error)
}
