﻿﻿{"id":8,"date":"2026-02-06T06:33:58","date_gmt":"2026-02-06T05:33:58","guid":{"rendered":"https:\/\/staff.samslim.fr\/?page_id=8"},"modified":"2026-02-06T06:33:58","modified_gmt":"2026-02-06T05:33:58","slug":"reservations","status":"publish","type":"page","link":"https:\/\/staff.samslim.fr\/index.php\/reservations\/","title":{"rendered":"R\u00e9servations"},"content":{"rendered":"        <div id=\"samstaff-booking-widget\" class=\"samstaff-widget-container\">\n            <style>\n                .samstaff-widget-container { max-width: 480px; margin: 0 auto; font-family: -apple-system, system-ui, sans-serif; }\n                .ss-field { margin-bottom: 15px; }\n                .ss-label { display: block; margin-bottom: 5px; font-weight: 600; font-size: 14px; }\n                .ss-input { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 8px; font-size: 16px; }\n                .ss-btn { width: 100%; padding: 12px; background: #0f172a; color: white; border: none; border-radius: 8px; font-weight: bold; cursor: pointer; }\n                .ss-btn:hover { background: #1e293b; }\n                .ss-error { color: #dc2626; font-size: 14px; margin-top: 10px; display: none; }\n                .ss-success { text-align: center; color: #16a34a; display: none; padding: 20px; background: #f0fdf4; border-radius: 8px; }\n            <\/style>\n\n            <form id=\"ss-booking-form\">\n                <div class=\"ss-field\">\n                    <label class=\"ss-label\">Couverts<\/label>\n                    <select name=\"pax\" class=\"ss-input\">\n                        <option value='1'>1 personnes<\/option><option value='2'>2 personnes<\/option><option value='3'>3 personnes<\/option><option value='4'>4 personnes<\/option><option value='5'>5 personnes<\/option><option value='6'>6 personnes<\/option><option value='7'>7 personnes<\/option><option value='8'>8 personnes<\/option>                    <\/select>\n                <\/div>\n                <div style=\"display: flex; gap: 10px;\">\n                    <div class=\"ss-field\" style=\"flex:1;\">\n                        <label class=\"ss-label\">Date<\/label>\n                        <input type=\"date\" name=\"date\" class=\"ss-input\" required value=\"2026-06-02\">\n                    <\/div>\n                    <div class=\"ss-field\" style=\"flex:1;\">\n                        <label class=\"ss-label\">Heure<\/label>\n                        <select name=\"time\" class=\"ss-input\">\n                            <option value=\"12:00\">12:00<\/option><option value=\"12:30\">12:30<\/option>\n                            <option value=\"13:00\">13:00<\/option><option value=\"13:30\">13:30<\/option>\n                            <option value=\"19:00\">19:00<\/option><option value=\"19:30\">19:30<\/option>\n                            <option value=\"20:00\">20:00<\/option><option value=\"20:30\">20:30<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n                <div class=\"ss-field\">\n                    <label class=\"ss-label\">Nom complet<\/label>\n                    <input type=\"text\" name=\"name\" class=\"ss-input\" required placeholder=\"Votre nom\">\n                <\/div>\n                <div class=\"ss-field\">\n                    <label class=\"ss-label\">Email<\/label>\n                    <input type=\"email\" name=\"email\" class=\"ss-input\" required placeholder=\"email@exemple.com\">\n                <\/div>\n                <div class=\"ss-field\">\n                    <label class=\"ss-label\">T\u00e9l\u00e9phone<\/label>\n                    <input type=\"tel\" name=\"phone\" class=\"ss-input\" required placeholder=\"06...\">\n                <\/div>\n                <div class=\"ss-field\">\n                    <label class=\"ss-label\">Demande particuli\u00e8re<\/label>\n                    <textarea name=\"notes\" class=\"ss-input\" rows=\"2\"><\/textarea>\n                <\/div>\n                \n                <button type=\"submit\" class=\"ss-btn\">Confirmer la table<\/button>\n                <div class=\"ss-error\" id=\"ss-error\"><\/div>\n            <\/form>\n            \n            <div class=\"ss-success\" id=\"ss-success\">\n                <h3>\u2705 R\u00e9servation Confirm\u00e9e<\/h3>\n                <p>Merci ! Nous avons bien re\u00e7u votre demande.<\/p>\n                <button onclick=\"location.reload()\" class=\"ss-btn\" style=\"background:#fff; color:#0f172a; border:1px solid #ddd; margin-top:10px;\">Nouvelle R\u00e9servation<\/button>\n            <\/div>\n        <\/div>\n\n        <script>\n        document.getElementById('ss-booking-form').addEventListener('submit', async function(e) {\n            e.preventDefault();\n            const btn = this.querySelector('button');\n            const error = document.getElementById('ss-error');\n            const success = document.getElementById('ss-success');\n            const form = this;\n            \n            btn.disabled = true;\n            btn.innerText = 'Validation...';\n            error.style.display = 'none';\n\n            const formData = new FormData(this);\n            const data = {\n                client_name: formData.get('name'),\n                client_email: formData.get('email'),\n                client_phone: formData.get('phone'),\n                date_booking: formData.get('date'),\n                time_booking: formData.get('time'),\n                pax: formData.get('pax'),\n                notes: formData.get('notes')\n            };\n\n            try {\n                \/\/ First Attempt\n                const res = await fetch('\/wp-json\/samstaff\/v1\/public\/bookings', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify(data)\n                });\n                const json = await res.json();\n                \n                if (res.ok && json.success) {\n                    form.style.display = 'none';\n                    success.style.display = 'block';\n                    if (json.status === 'WAITING') {\n                         success.querySelector('h3').innerText = \"\u00e2\u008f\u00b3 Liste d'Attente\";\n                         let msg = \"Vous \u00eates sur liste d'attente. Nous vous recontacterons si une place se lib\u00e8re.\";\n                         if (json.waitlist_position) {\n                             msg += ` Position: #${json.waitlist_position}.`;\n                         }\n                         if (json.waitlist_eta) {\n                             msg += ` ETA estim\u00e9e: ${json.waitlist_eta.substring(11,16)}.`;\n                         }\n                         success.querySelector('p').innerText = msg;\n                    }\n                } else if (res.status === 409 && json.waitlist_available) {\n                    \/\/ Waitlist Offer\n                    if ( confirm( json.message ) ) {\n                        \/\/ User accepted waitlist -> Retry with force_waitlist\n                        data.force_waitlist = true;\n                        const res2 = await fetch('\/wp-json\/samstaff\/v1\/public\/bookings', {\n                            method: 'POST',\n                            headers: { 'Content-Type': 'application\/json' },\n                            body: JSON.stringify(data)\n                        });\n                        const json2 = await res2.json();\n                        \n                        if (res2.ok && json2.success) {\n                            form.style.display = 'none';\n                            success.style.display = 'block';\n                            success.querySelector('h3').innerText = \"\u00e2\u008f\u00b3 Liste d'Attente\";\n                            let msg2 = \"Vous \u00eates bien inscrit sur liste d'attente.\";\n                            if (json2.waitlist_position) {\n                                msg2 += ` Position: #${json2.waitlist_position}.`;\n                            }\n                            if (json2.waitlist_eta) {\n                                msg2 += ` ETA estim\u00e9e: ${json2.waitlist_eta.substring(11,16)}.`;\n                            }\n                            success.querySelector('p').innerText = msg2;\n                        } else {\n                            throw new Error(json2.message || 'Erreur lors de l\\'inscription sur liste d\\'attente');\n                        }\n                    } else {\n                        \/\/ User declined\n                        throw new Error(\"R\u00e9servation annul\u00e9e.\");\n                    }\n                } else {\n                    throw new Error(json.message || 'Erreur inconnue');\n                }\n            } catch (err) {\n                error.innerText = err.message;\n                error.style.display = 'block';\n                btn.disabled = false;\n                btn.innerText = 'Confirmer la table';\n            }\n        });\n        <\/script>\n        \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/staff.samslim.fr\/index.php\/wp-json\/wp\/v2\/pages\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staff.samslim.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staff.samslim.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staff.samslim.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/staff.samslim.fr\/index.php\/wp-json\/wp\/v2\/comments?post=8"}],"version-history":[{"count":1,"href":"https:\/\/staff.samslim.fr\/index.php\/wp-json\/wp\/v2\/pages\/8\/revisions"}],"predecessor-version":[{"id":9,"href":"https:\/\/staff.samslim.fr\/index.php\/wp-json\/wp\/v2\/pages\/8\/revisions\/9"}],"wp:attachment":[{"href":"https:\/\/staff.samslim.fr\/index.php\/wp-json\/wp\/v2\/media?parent=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}