import { __ } from '@wordpress/i18n'; export interface Field { key: string; label: string; type: 'text' | 'textarea' | 'number' | 'checkbox' | 'select' | 'date' | 'time' | 'datetime-local' | 'email' | 'tel'; nullable?: boolean; required?: boolean; min?: number; maxLength?: number; description?: string; options?: [ string, string ][]; } export const resourceTypes: [ string, string ][] = [ ['court', __('Court', 'abece-booking')], ['field', __('Field', 'abece-booking')], ['wall', __('Wall', 'abece-booking')], ['room', __('Room', 'abece-booking')], ['other', __('Other', 'abece-booking')], ['table', __('Table', 'abece-booking')], ['lane', __('Lane', 'abece-booking')], ['box', __('Box', 'abece-booking')], ]; export const accessModes: [ string, string ][] = [ ['public', __('Public', 'abece-booking')], ['members_only', __('Members only', 'abece-booking')], ['members_priority', __('Members priority', 'abece-booking')], ]; export const commonFields: Field[] = [ { key: 'name', label: __('Name', 'abece-booking'), type: 'text', required: true }, { key: 'slug', label: __('Slug', 'abece-booking'), type: 'text' }, { key: 'description', label: __('Description', 'abece-booking'), type: 'textarea', nullable: true }, { key: 'is_active', label: __('Active', 'abece-booking'), type: 'checkbox' }, { key: 'sort_order', label: __('Sort order', 'abece-booking'), type: 'number', required: true }, ]; export const resourceFields: Field[] = [ { key: 'sport_id', label: __('Sport', 'abece-booking'), type: 'select', nullable: true }, { key: 'resource_type', label: __('Resource type', 'abece-booking'), type: 'text', required: true, maxLength: 50 }, { key: 'surface', label: __('Surface', 'abece-booking'), type: 'text', nullable: true }, { key: 'capacity', label: __('Capacity', 'abece-booking'), type: 'number', nullable: true, min: 0 }, { key: 'is_visible', label: __('Visible', 'abece-booking'), type: 'checkbox' }, { key: 'is_bookable', label: __('Bookable', 'abece-booking'), type: 'checkbox' }, { key: 'access_mode', label: __('Access mode', 'abece-booking'), type: 'select', options: accessModes }, { key: 'member_booking_days', label: __('Members can book up to (days ahead)', 'abece-booking'), type: 'number', nullable: true, min: 1 }, { key: 'guest_booking_days', label: __('Non-members can book up to (days ahead)', 'abece-booking'), type: 'number', nullable: true, min: 1 }, { key: 'public_release_hours', label: __('Release to non-members (hours before start)', 'abece-booking'), type: 'number', nullable: true, min: 1 }, { key: 'min_booking_minutes', label: __('Minimum booking minutes', 'abece-booking'), type: 'number', required: true, min: 1 }, { key: 'max_booking_minutes', label: __('Maximum client booking duration', 'abece-booking'), type: 'number', required: true, min: 1 }, { key: 'booking_step_minutes', label: __('Booking step minutes', 'abece-booking'), type: 'number', required: true, min: 1 }, ];