import { __ } from '@wordpress/i18n'
import {
GiftCardDesignValue,
GiftCardDesignVariant,
GiftCardDesignVariantId,
GiftCardPlaceholder,
} from './types'
export const GIFT_CARD_DESIGN_VARIANTS: GiftCardDesignVariant[] = [
{
id: 'botanical_green',
label: __('Botanical Green', 'webba-booking-lite'),
background: 'public/images/gift-card-1-background.webp',
width: 1149,
height: 1369,
},
{
id: 'spa_wellness',
label: __('Spa Wellness', 'webba-booking-lite'),
background: 'public/images/gift-card-2-background.webp',
width: 1536,
height: 1024,
},
{
id: 'gold_ribbon',
label: __('Gold Ribbon', 'webba-booking-lite'),
background: 'public/images/gift-card-3-background.webp',
width: 1536,
height: 1024,
},
{
id: 'black_gold',
label: __('Black Gold', 'webba-booking-lite'),
background: 'public/images/gift-card-4-background.webp',
width: 1536,
height: 1024,
},
]
export const GIFT_CARD_DESIGN_PLACEHOLDERS: GiftCardPlaceholder[] = [
{ text: __('Site URL', 'webba-booking-lite'), content: '#site_url' },
{ text: __('Site name', 'webba-booking-lite'), content: '#site_name' },
{ text: __('Site logo', 'webba-booking-lite'), content: '#site_logo' },
{
text: __('Gift card code', 'webba-booking-lite'),
content: '#gift_card_code',
},
{
text: __('Gift card QR code', 'webba-booking-lite'),
content: '#qr_gift_code',
},
{
text: __('Buyer name', 'webba-booking-lite'),
content: '#gift_card_buyer_name',
},
{
text: __('Buyer email', 'webba-booking-lite'),
content: '#gift_card_buyer_email',
},
{
text: __('Recipient name', 'webba-booking-lite'),
content: '#gift_card_recipient_name',
},
{
text: __('Recipient email', 'webba-booking-lite'),
content: '#gift_card_recipient_email',
},
{
text: __('Amount', 'webba-booking-lite'),
content: '#gift_card_amount',
},
{
text: __('Expiration date', 'webba-booking-lite'),
content: '#gift_card_expiration_date',
},
]
export const getGiftCardDesignVariant = (
variantId: string
): GiftCardDesignVariant => {
return (
GIFT_CARD_DESIGN_VARIANTS.find((variant) => variant.id === variantId) ||
GIFT_CARD_DESIGN_VARIANTS[0]
)
}
export const getDefaultGiftCardOverlayHtml = (
variantId: GiftCardDesignVariantId = 'botanical_green'
): string => {
if (variantId === 'spa_wellness') {
return getSpaWellnessOverlayHtml()
}
if (variantId === 'gold_ribbon') {
return getGoldRibbonOverlayHtml()
}
if (variantId === 'black_gold') {
return getBlackGoldOverlayHtml()
}
return getBotanicalGreenOverlayHtml()
}
const getGiftCardQrOverlayHtml = (
right: string,
bottom: string,
width: string
): string =>
`
#qr_gift_code
`
const getBotanicalGreenOverlayHtml = (): string => {
return (
'' +
'
' +
`
${__(
'A SPECIAL',
'webba-booking-lite'
)}
` +
`
${__(
'GIFT CARD',
'webba-booking-lite'
)}
` +
`
${__(
'A GIFT FOR',
'webba-booking-lite'
)}
` +
'
#gift_card_recipient_name
' +
'
#gift_card_recipient_email
' +
'
#gift_card_amount
' +
`
${__(
'From #gift_card_buyer_name',
'webba-booking-lite'
)}
` +
`
${__(
'YOUR CODE',
'webba-booking-lite'
)}
` +
'
#gift_card_code
' +
`
${__(
'Valid until #gift_card_expiration_date',
'webba-booking-lite'
)}
` +
'
✉ #gift_card_buyer_email
' +
`
${__(
'Use this code when you book to redeem your gift at
#site_name.',
'webba-booking-lite'
)}
` +
getGiftCardQrOverlayHtml('6.8%', '5.4%', '13.2%') +
'
'
)
}
const UBUNTU = 'Ubuntu,Arial,Helvetica,sans-serif'
const SPA_SERIF = UBUNTU
const SPA_SANS = UBUNTU
const SPA_SCRIPT = UBUNTU
const getSpaWellnessOverlayHtml = (): string => {
return (
`` +
'
' +
`
${__(
'RELAX · RECHARGE · FEEL GOOD',
'webba-booking-lite'
)}
` +
`
${__(
'A GIFT CARD',
'webba-booking-lite'
)}
` +
`
${__(
'FOR',
'webba-booking-lite'
)}
` +
`
#gift_card_recipient_name
` +
`
#gift_card_recipient_email
` +
`
${__(
'FROM #gift_card_buyer_name',
'webba-booking-lite'
)}
` +
`
${__(
'A SPECIAL GIFT OF',
'webba-booking-lite'
)}
` +
`
#gift_card_amount
` +
`
${__(
'YOUR CODE',
'webba-booking-lite'
)}
` +
`
#gift_card_code
` +
`
${__(
'Valid until #gift_card_expiration_date',
'webba-booking-lite'
)}
` +
`
✉ #gift_card_buyer_email
` +
`
${__(
'Use this code when you book to redeem your gift at
#site_name.',
'webba-booking-lite'
)}
` +
`
${__(
'Wellness
is a gift
❤',
'webba-booking-lite'
)}
` +
getGiftCardQrOverlayHtml('3.4%', '3.6%', '10.6%') +
'
'
)
}
const getGoldRibbonOverlayHtml = (): string => {
const serif = UBUNTU
const sans = UBUNTU
const rule =
''
const column =
'left:34%;right:17.3%;text-align:center;'
return (
`` +
`
' +
`
${__(
'GIFT CARD',
'webba-booking-lite'
)}
` +
`
${rule}${__(
'A GIFT FOR',
'webba-booking-lite'
)}${rule}
` +
`
#gift_card_recipient_name
` +
`
#gift_card_recipient_email
` +
`
#gift_card_amount
` +
`
${__(
'From #gift_card_buyer_name',
'webba-booking-lite'
)}
` +
`
${__(
'YOUR CODE',
'webba-booking-lite'
)}
` +
`
#gift_card_code
` +
`
${__(
'Valid until #gift_card_expiration_date',
'webba-booking-lite'
)}
` +
`
✉ #gift_card_buyer_email
` +
`
${__(
'Use this code when you book to redeem your gift at
#site_name.',
'webba-booking-lite'
)}
` +
getGiftCardQrOverlayHtml('5.2%', '5%', '11.2%') +
'
'
)
}
const getBlackGoldOverlayHtml = (): string => {
const serif = UBUNTU
const sans = UBUNTU
const rule =
''
return (
`` +
`
${__(
'A
GIFT
FOR
YOU',
'webba-booking-lite'
)}
` +
'
' +
`
${__(
'A SPECIAL',
'webba-booking-lite'
)}
` +
`
${__(
'GIFT CARD',
'webba-booking-lite'
)}
` +
`
${rule}${__(
'A GIFT FOR',
'webba-booking-lite'
)}${rule}
` +
`
#gift_card_recipient_name
` +
`
#gift_card_recipient_email
` +
`
#gift_card_amount
` +
`
${__(
'FROM #gift_card_buyer_name',
'webba-booking-lite'
)}
` +
`
${__(
'YOUR CODE',
'webba-booking-lite'
)}
` +
'
' +
`
#gift_card_code
` +
`
${__(
'Valid until #gift_card_expiration_date',
'webba-booking-lite'
)}
` +
`
✉ #gift_card_buyer_email
` +
`
${__(
'Use this code when you book to redeem your gift at
#site_name.',
'webba-booking-lite'
)}
` +
'
' +
getGiftCardQrOverlayHtml('4.6%', '4.6%', '11%') +
'
'
)
}
export const getDefaultGiftCardDesign = (
variantId: GiftCardDesignVariantId = 'botanical_green'
): GiftCardDesignValue => ({
variant: variantId,
html: getDefaultGiftCardOverlayHtml(variantId),
})
export const parseGiftCardDesign = (
value: unknown
): GiftCardDesignValue | null => {
if (typeof value !== 'string' || !value.trim()) {
return null
}
const restoreFromVariant = (): GiftCardDesignValue | null => {
const match = value.match(/"variant"\s*:\s*"([a-z0-9_]+)"/i)
if (!match) {
return null
}
const variant = getGiftCardDesignVariant(match[1])
return getDefaultGiftCardDesign(variant.id)
}
try {
const parsed = JSON.parse(value)
if (!parsed || typeof parsed !== 'object' || !parsed.variant) {
return restoreFromVariant()
}
const variant = getGiftCardDesignVariant(String(parsed.variant))
const html =
typeof parsed.html === 'string' && parsed.html.includes('<')
? parsed.html
: getDefaultGiftCardOverlayHtml(variant.id)
return {
variant: variant.id,
html,
}
} catch {
return restoreFromVariant()
}
}
export const serializeGiftCardDesign = (design: GiftCardDesignValue): string =>
JSON.stringify(design)