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 ( '
' + '
' + '' + '#site_name' + '#site_name' + '' + '
' + `
${__( '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 ( `
` + '
' + '' + '#site_name' + `#site_name` + '' + '
' + `
${__( '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 ( `
` + `
` + '' + '#site_name' + `#site_name` + '' + '
' + `
${__( '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' )}
` + '
' + '' + '#site_name' + `#site_name` + '' + '
' + `
${__( '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)