package constants

type PaymentMethodType string

const (
	PaymentMethodTypeCash          PaymentMethodType = "cash"
	PaymentMethodTypeCard          PaymentMethodType = "card"
	PaymentMethodTypeDigitalWallet PaymentMethodType = "digital_wallet"
	PaymentMethodTypeQR            PaymentMethodType = "qr"
	PaymentMethodTypeEDC           PaymentMethodType = "edc"
)

type PaymentStatus string

const (
	PaymentStatusPending   PaymentStatus = "pending"
	PaymentStatusCompleted PaymentStatus = "completed"
	PaymentStatusFailed    PaymentStatus = "failed"
	PaymentStatusRefunded  PaymentStatus = "refunded"
)

type PaymentTransactionStatus string

const (
	PaymentTransactionStatusPending   PaymentTransactionStatus = "pending"
	PaymentTransactionStatusCompleted PaymentTransactionStatus = "completed"
	PaymentTransactionStatusFailed    PaymentTransactionStatus = "failed"
	PaymentTransactionStatusRefunded  PaymentTransactionStatus = "refunded"
)

func GetAllPaymentMethodTypes() []PaymentMethodType {
	return []PaymentMethodType{
		PaymentMethodTypeCash,
		PaymentMethodTypeCard,
		PaymentMethodTypeDigitalWallet,
	}
}

func GetAllPaymentStatuses() []PaymentStatus {
	return []PaymentStatus{
		PaymentStatusPending,
		PaymentStatusCompleted,
		PaymentStatusFailed,
		PaymentStatusRefunded,
	}
}

func GetAllPaymentTransactionStatuses() []PaymentTransactionStatus {
	return []PaymentTransactionStatus{
		PaymentTransactionStatusPending,
		PaymentTransactionStatusCompleted,
		PaymentTransactionStatusFailed,
		PaymentTransactionStatusRefunded,
	}
}

func IsValidPaymentMethodType(methodType PaymentMethodType) bool {
	for _, validType := range GetAllPaymentMethodTypes() {
		if methodType == validType {
			return true
		}
	}
	return false
}

func IsValidPaymentStatus(status PaymentStatus) bool {
	for _, validStatus := range GetAllPaymentStatuses() {
		if status == validStatus {
			return true
		}
	}
	return false
}

func IsValidPaymentTransactionStatus(status PaymentTransactionStatus) bool {
	for _, validStatus := range GetAllPaymentTransactionStatuses() {
		if status == validStatus {
			return true
		}
	}
	return false
}
