package validator

import (
	"apskel-pos-be/internal/contract"
	"errors"
)

type VoucherValidator interface {
	ValidateListVouchersForSpinRequest(req *contract.ListVouchersForSpinRequest) (error, string)
	ValidateListVouchersByRowsRequest(req *contract.ListVouchersByRowsRequest) (error, string)
}

type VoucherValidatorImpl struct{}

func NewVoucherValidator() VoucherValidator {
	return &VoucherValidatorImpl{}
}

func (v *VoucherValidatorImpl) ValidateListVouchersForSpinRequest(req *contract.ListVouchersForSpinRequest) (error, string) {
	if req.Limit < 1 {
		return errors.New("limit must be at least 1"), "INVALID_LIMIT"
	}

	if req.Limit > 50 {
		return errors.New("limit cannot exceed 50"), "INVALID_LIMIT"
	}

	return nil, ""
}

func (v *VoucherValidatorImpl) ValidateListVouchersByRowsRequest(req *contract.ListVouchersByRowsRequest) (error, string) {
	if req.Rows < 1 {
		return errors.New("rows must be at least 1"), "INVALID_ROWS"
	}

	if req.Rows > 10 {
		return errors.New("rows cannot exceed 10"), "INVALID_ROWS"
	}

	return nil, ""
}
