package ports

import (
	"Yimaru-Backend/internal/domain"
	"context"
)

type PaymentStore interface {
	CreatePayment(ctx context.Context, input domain.CreatePaymentInput) (*domain.Payment, error)
	GetPaymentByID(ctx context.Context, id int64) (*domain.Payment, error)
	GetPaymentBySessionID(ctx context.Context, sessionID string) (*domain.Payment, error)
	GetPaymentByNonce(ctx context.Context, nonce string) (*domain.Payment, error)
	GetPaymentByTransactionID(ctx context.Context, transactionID string) (*domain.Payment, error)
	GetPaymentsByUserID(ctx context.Context, userID int64, limit, offset int32) ([]domain.Payment, error)
	GetPendingPaymentsByUserID(ctx context.Context, userID int64) ([]domain.Payment, error)
	UpdatePaymentStatus(ctx context.Context, id int64, status string) error
	UpdatePaymentStatusBySessionID(ctx context.Context, sessionID, status, transactionID, paymentMethod string) error
	UpdatePaymentStatusByNonce(ctx context.Context, nonce, status, transactionID, paymentMethod string) error
	UpdatePaymentSessionID(ctx context.Context, id int64, sessionID, paymentURL string) error
	LinkPaymentToSubscription(ctx context.Context, paymentID, subscriptionID int64) error
	GetExpiredPendingPayments(ctx context.Context) ([]domain.Payment, error)
	ExpirePayment(ctx context.Context, id int64) error
}
