package domain

import "time"

type TransferType string

const (
	DEPOSIT  TransferType = "deposit"
	WITHDRAW TransferType = "withdraw"
	WALLET   TransferType = "wallet"
)

type PaymentMethod string

const (
	TRANSFER_CASH      PaymentMethod = "cash"
	TRANSFER_BANK      PaymentMethod = "bank"
	TRANSFER_CHAPA     PaymentMethod = "chapa"
	TRANSFER_ARIFPAY   PaymentMethod = "arifpay"
	TRANSFER_SANTIMPAY PaymentMethod = "santimpay"
	TRANSFER_ADDISPAY  PaymentMethod = "addispay"
	TRANSFER_OTHER     PaymentMethod = "other"
)

// There is always a receiving wallet id
// There is a sender wallet id only if wallet transfer type
type Transfer struct {
	ID               int64
	Amount           Currency
	Verified         bool
	Type             TransferType
	PaymentMethod    PaymentMethod
	ReceiverWalletID int64
	SenderWalletID   int64
	ReferenceNumber  string
	Status           string
	CashierID        ValidInt64
	CreatedAt        time.Time
	UpdatedAt        time.Time
}

type CreateTransfer struct {
	Amount           Currency
	Verified         bool
	ReferenceNumber  string
	Status           string
	ReceiverWalletID int64
	SenderWalletID   int64
	CashierID        ValidInt64
	Type             TransferType
	PaymentMethod    PaymentMethod
}
