const loader = require("./loader.js");
const validator = require("./validator.js");
const helper = require("./helper.js");
const Cookies = require('js-cookie');

function renderFormRecord(userInfo, params) {
    popup.dataset.specialistid = params.specialistid;
    popup.dataset.filialid = params.filialid;
    popup.dataset.depnum = params.department;
    popup.dataset.schedident = params.schedident;
    popup.dataset.workDate = params.workDate;
    popup.dataset.time = params.time;
    popup.dataset.onlinemode = params.onlinemode;
    // data-docName в HTML даёт dataset.docName; поддерживаем оба варианта
    const docname = (params.docName ?? params.docname ?? '').toString();
    const address = (params.address ?? '').toString();
    const company = (params.company ?? '').toString();
    const comment = (params.comment ?? '').toString();
    popup.dataset.docname = docname;
    popup.dataset.address = address;
    popup.dataset.company = company;
    popup.dataset.comment = comment;
    popup.dataset.rnum = params.rnum;
    popup.querySelector('.modal-title').innerHTML = (params.onlinemode === 'false')
        ? 'Записаться к врачу'
        : 'Запись на онлайн-консультацию'
    ;

    popup.querySelector('.modal-dialog').classList.remove('modal-lg');
    var popupBody = popup.querySelector('#popup-body');
    popupBody.innerHTML = '';

    var div = document.createElement('div');
    div.classList = 'form-group';

    var licenseLink = helper.getLicenseLink(Cookies.get('region'));
    
    if (params.onlinemode === 'false') {
        var license = document.createElement('a');
        license.classList = "staff-info__review license-link";
        license.href = licenseLink;
        license.target = '_blank';
        license.innerHTML = 'Отправляя данные, вы подтверждаете согласие на обработку персональных данных и принимаете условия политики их обработки';
        div.append(license);
        popupBody.append(div);
    } else {
        var license = document.createElement('p');
        license.classList = "px-2";
        license.innerHTML = `Для записи необходимо ознакомиться с <a href="${licenseLink}" target="_blank">политикой в отношении обработки персональных данных</a>, согласием на <a href="${licenseLink}" target="_blank">обработку персональных данных</a>.`;
        div.append(license);
        popupBody.append(div);
        
        const formCheck = document.createElement('div');
        formCheck.classList = "form-check";
        popupBody.append(formCheck);

        const formCheckInput = document.createElement('input');
        formCheckInput.type="checkbox";
        formCheckInput.classList="form-check-input";
        formCheckInput.id="accept-btn";
        formCheck.append(formCheckInput);

        const formCheckLabel = document.createElement('label');
        formCheckLabel.classList = "form-check-label";
        formCheckLabel.htmlFor="accept-btn";
        formCheckLabel.innerHTML = `
            ознакомлен с <a href="${licenseLink}" target="_blank">политикой в отношении обработки персональных данных</a>, 
            согласием на <a href="${licenseLink}" target="_blank">обработку персональных данных</a> 
            и <a href="/docs/oferta.pdf" target="_blank">договором оферты</a>, <a href="/docs/ids.pdf" target="_blank">информированным добровольным согласием (ИДС)</a>.
        `;
        formCheck.addEventListener('click', function () {
            let authButton = document.getElementById('auth-button');
            let scheduleButton = document.getElementById('schedule-button');

            if (userInfo) {
                scheduleButton.disabled = true;
                scheduleButton.classList.add('disabled');
            } else {
                authButton.disabled = true;
                authButton.classList.add('disabled');
            }
            
            if (formCheckInput.checked) {
                if (userInfo) {
                    scheduleButton.disabled = false;
                    scheduleButton.classList.remove('disabled');
                } else {
                    authButton.disabled = false;
                    authButton.classList.remove('disabled');
                }
            }
        });

        formCheck.append(formCheckLabel);  
    }

    var footer = document.createElement('div');
    footer.classList = 'col-12 popup-modal-footer mt-1';
    footer.style.flexWrap = 'nowrap';
    footer.style.justifyContent = 'space-between';
    popupBody.append(footer);

    if (userInfo) {
        let scheduleButton = document.createElement('button');
        scheduleButton.classList = "button mb-3 w-100 submit";
        scheduleButton.id = "schedule-button";
        scheduleButton.disabled = params.onlinemode === 'false'? false : true;
        scheduleButton.innerHTML = "Записать меня"
        scheduleButton.addEventListener('click', function () {
            sendReserve(popup);
        });
        footer.append(scheduleButton);
    } else {
        let authButton = document.createElement('button');
        authButton.classList = "button mb-3 w-100";
        authButton.id = "auth-button";
        authButton.disabled = params.onlinemode === 'false'? false : true;
        authButton.innerHTML = "Войти и записать меня";
        authButton.dataset.controller = 'signin';
        authButton.dataset.action = 'click->signin#login';
        authButton.addEventListener('click', function () {
            // Сохраняем данные записи в sessionStorage перед входом
            // чтобы восстановить их после авторизации (на случай потери dataset)
            sessionStorage.setItem('reserveData', JSON.stringify({
                specialistid: params.specialistid,
                filialid: params.filialid,
                depnum: params.department,
                schedident: params.schedident,
                workDate: params.workDate,
                time: params.time,
                onlinemode: params.onlinemode,
                comment: params.comment,
                docname: params.docname,
                address: params.address,
                company: params.company,
                rnum: params.rnum
            }));
            sessionStorage.setItem('reserveFlag', 'true');
            
            popup.dataset.reserve = 'true';
        });
        footer.append(authButton);
    }


    if (popup.dataset.onlinemode === 'false') {
        var buttonAnon = document.createElement('button');
        buttonAnon.classList = "button mb-3 w-100";
        buttonAnon.innerHTML = "Записать без авторизации"
        buttonAnon.addEventListener('click', function () {
            renderFormAnonym(popup);
        });
        var info = document.createElement('p');
        info.style.color = 'red';
        info.innerHTML = '* Внимание! При записи другого человека информация о записи в Вашем личном кабинете не отображается, отменить или перенести запись можно будет только позвонив в колл-центр.';
        popupBody.append(info);
        footer.append(buttonAnon);
    }

    return true;
}

function renderFormBitrix(el, nameValue = '', phoneValue = '', dateValue = '', alert= false) {
    popup.querySelector('.modal-title').innerText = 'Записаться на прием';
    popup.querySelector('.modal-dialog').classList.remove('modal-lg');
    var popupBody = popup.querySelector('#popup-body');
    popupBody.innerHTML = "";

    var div = document.createElement('div');
    div.classList = 'form-group';

    var name = document.createElement('input');
    name.classList = "form-control";
    name.id = "name";
    name.placeholder = 'Имя:';
    name.type = "text";

    if (nameValue !== '') {
        name.value = nameValue;
    }

    div.append(name);

    var validName = document.createElement('div');
    validName.classList = 'msg-valid valid-name';
    div.append(validName);
    popupBody.append(div);

    var div = document.createElement('div');
    div.classList = 'form-group';

    var phone = document.createElement('input');
    phone.classList = "form-control";
    phone.id = "phone";
    phone.placeholder = 'Телефон:';
    
    if (phoneValue !== '') {
        phone.value = phoneValue;
    }

    phone.dataset.controller = "inputMask";
    phone.type = "text";
    div.append(phone);

    var validPhone = document.createElement('div');
    validPhone.classList = 'msg-valid valid-phone';
    div.append(validPhone);
    popupBody.append(div);

    var div = document.createElement('div');
    div.classList = 'form-group';

    var date = document.createElement('input');
    date.classList = "form-control";
    date.id = "date";
    date.placeholder = "Желаемая дата:";
    date.range = "false";
    
    if (dateValue !== '') {
        date.value = dateValue;
    }

    date.dataset.controller = "datePicker";
    date.type = "text";
    div.append(date);
    popupBody.append(div)

    var div = document.createElement('div');
    div.classList = 'form-group';

    var service = document.createElement('input');
    service.classList = "form-control";
    service.id = "service";
    service.type = "text";

    if (el.dataset.comment) {
        service.placeholder = 'Услуга:';
    } else {
        service.placeholder = 'ФИО нужного врача:';
    }

    if (el.dataset.comment) {
        service.disabled = "true";
        service.value = el.dataset.comment;
    }

    div.append(service);

    var validService = document.createElement('div');
    validService.classList = 'msg-valid valid-service';
    div.append(validService);

    popupBody.append(div)

    var licenseLink = helper.getLicenseLink(Cookies.get('region'));
    var div = document.createElement('div');
    div.classList = 'form-group';

    if (typeof el.dataset.company == 'undefined') {
        el.dataset.company = '';
    }

    /* политика */
    var div = document.createElement('div');
    div.classList = 'form-group';

    var formCheck = document.createElement('div');
    formCheck.classList = 'form-check';
    div.append(formCheck);

    var accept = document.createElement('input');
    accept.classList = "form-check-input";
    accept.id = "accept";
    accept.checked = false;
    accept.type = "checkbox";
    formCheck.append(accept);

    var license = helper.getLicenseLink(Cookies.get('region'));
    var label = document.createElement('label');
    label.setAttribute('for' , 'accept');
    var companyText = (el.dataset.company ?? '').toString();
    if (companyText === 'undefined') companyText = '';
    label.innerHTML = `ознакомлен(а) <a class="underline" href="${license}" target="_blank">с условиями политики в отношении обработки персональных данных</a> ${companyText}`;
    
    formCheck.append(label);
    
    var validAccept = document.createElement('div');
    validAccept.classList = 'msg-valid valid-accept';
    div.append(validAccept);

    popupBody.append(div)

    /* согласие */

    var formCheck = document.createElement('div');
    formCheck.classList = 'form-check';
    div.append(formCheck);

    var acceptPerson = document.createElement('input');
    acceptPerson.classList = "form-check-input";
    acceptPerson.id = "acceptPerson";
    acceptPerson.checked = false;
    acceptPerson.type = "checkbox";
    formCheck.append(acceptPerson);

    var licensePerson = helper.getLicensePersonLink();
    var labelPerson = document.createElement('label');
    labelPerson.setAttribute('for' , 'acceptPerson');
    labelPerson.innerHTML = `даю согласие <a class="underline" href="${licensePerson}" target="_blank">на обработку персональных данных</a>`;
    
    formCheck.append(labelPerson);
    
    var validAcceptPerson = document.createElement('div');
    validAcceptPerson.classList = 'msg-valid valid-acceptPerson';
    div.append(validAcceptPerson);

    popupBody.append(div)

    if (alert) {
        var div = document.createElement('div');
        div.classList = 'form-group';

        var span = document.createElement('span');
        span.classList = 'text-danger';
        span.innerHTML = 'К сожалению,  в настоящий момент фиксируем сбой при отправке смс. Пожалуйста проверьте корректность данных и нажмите кнопку отправить. Оператор свяжется с Вами и запишет Вас на это время.';
        div.append(span);
        popupBody.append(div);
    }

    const btnSubmit = document.createElement('button');
    btnSubmit.innerHTML = 'Отправить';
    btnSubmit.classList = 'btn btn-outline-secondary'
    btnSubmit.addEventListener('click', function() {
        var invalid = false;

        if (validator.checkAccept(accept, validAccept)) {
            invalid = true;
        }

        if (validator.checkAccept(acceptPerson, validAcceptPerson)) {
            invalid = true;
        }

        if (validator.checkTextRu(name, validName)) {
            invalid = true;
        }
        
        if (validator.checkPhone(phone, validPhone)) {
            invalid = true;
        }
        
        if (validator.checkNotEmpty(service, validService)) {
            invalid = true;
        }

        if (invalid) {
            return false;
        }

        var params = { 
            'fields' : {
                'TITLE': 'Запрос услуги через личный кабинет',
                'NAME': name.value,
                'PHONE': [{
                    'VALUE': phone.value, 
                    'VALUE_TYPE': 'WORK' 
                }], 
                'ASSIGNED_BY_ID' : 506,
                'UF_CRM_1533790214': date.value,
                'UF_CRM_1533790164': service.value,
                'UF_CRM_1539951158': helper.getCityCRM(Cookies.get('region'))
            }
        };

        helper.sendRequest(params, 'https://sovamed.bitrix24.ru/rest/10998/3hrv38rzo3khchj3/crm.lead.add.json', 'POST', 'json', false).then(function() {
            let searchParams = new URLSearchParams(location.search);

            var data = {
                'subject': 'Запись в КЦ',
                'requestUrl': location.href,
                'sessionId': helper.getSessionId(),
                'phoneNumber': phone.value,
                'fio': name.value,
                'tag': 'кц_запись',
                'comment' : {
                    'docName': el.dataset.docName ?? el.dataset.docname ?? '',
                    'address': el.dataset.address ?? '',
                    'comment': el.dataset.comment ?? ''
                },
                'customSources': {
                    "source": searchParams.get('utm_source'),
                    "medium": searchParams.get('utm_medium'),
                    "campaign": searchParams.get('utm_campaign'),
                    "content": searchParams.get('utm_content'),
                    "term": searchParams.get('utm_term')
                }                      
            }

            if (window.bitrix === true) {
                data.regionId = helper.getRegionIdByHost()
            }

            helper.sendRequest(data, '/api/add-calltouch').then(function(calltouch) {
                var popup = document.getElementById('popup');
                
                if (window.bitrix) {
                    popup.querySelector('.modal-title').innerHTML = 'Запись на прием';
                    var message = '<p>Спасибо, Вы успешно записались на прием. </br>';
                    message += popup.dataset.comment + ', ';
                    message += popup.dataset.workDate + ' ' + popup.dataset.time + '</br></p>';
                    popup.querySelector('#popup-body').innerHTML = message;
                } else {
                    loader.btnLoader(btnSubmit, false);
                    var successAlert = document.createElement('div');
                    successAlert.classList = 'alert alert-success alert-dismissible fade show';
                    successAlert.setAttribute('role', 'alert');

                    var divMsg = document.createElement('div');
                    divMsg.classList = 'alert-msg';
                    divMsg.innerHTML = '<p>Запись на прием подтверждена.</p>';

                    var docName = el.dataset.docName ?? el.dataset.docname ?? '';
                    if (docName && el.dataset.address) {
                       divMsg.innerHTML += '<p>Врач - ' + docName +'</p>';
                       divMsg.innerHTML += '<p>Клиника - ' + el.dataset.address +'</p>';
                    }

                    divMsg.innerHTML += '<p>Дата - ' + date.value + '</p>';
                    successAlert.append(divMsg);

                    var buttonClose = document.createElement('button');
                    buttonClose.classList = 'close';
                    buttonClose.dataset.dismiss ='alert';
                    buttonClose.setAttribute('aria-label', 'Close');
                    buttonClose.innerHTML = '<span aria-hidden="true">&times;</span>';
                    successAlert.append(buttonClose);
                    document.getElementById('alert-system').prepend(successAlert);

                    if (popup && typeof $(popup).modal !== 'undefined') {
                        $(popup).modal('hide');
                    }

                    $('html, body').animate({scrollTop:0}, '300');
                }
            });
        });
    });

    popupBody.append(btnSubmit)
}

async function renderCheckEvent(hash, id) {
    popup.querySelector('.modal-title').innerHTML = 'Вы записались на прием';
    popup.querySelector('.modal-dialog').classList.add('modal-lg');

    const popupBody = popup.querySelector('#popup-body');
    
    popupBody.innerHTML = '';

    try {
        const response = await fetch('/widget/check/' + hash + '/' + id);
        
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        
        const blob = await response.blob();
        const url = window.URL.createObjectURL(blob);
        
        // Создаем iframe для отображения PDF
        const iframe = document.createElement('iframe');
        iframe.src = url;
        iframe.style.width = '100%';
        iframe.style.height = '80vh'; // 80% высоты viewport
        iframe.style.border = 'none';
        iframe.style.borderRadius = '8px';

        // Очищаем содержимое модального окна и добавляем iframe
        popupBody.appendChild(iframe);
    } catch (error) {
        console.error('Ошибка загрузки:', error);
        popupBody.innerHTML = `<p style="color: red;">Ошибка загрузки: ${error.message}</p>`;
    }
}

function renderFormAnonym(el) {
    popup.querySelector('.modal-title').innerText = 'Записать другого человека';
    popup.querySelector('.modal-dialog').classList.remove('modal-lg');
    var popupBody = popup.querySelector('#popup-body');
    popupBody.innerHTML = "";

    var div = document.createElement('div');
    div.classList = 'form-group';

    var name = document.createElement('input');
    name.classList = "form-control";
    name.id = "name";
    name.placeholder = "Ф.И.О.";
    name.type = "text";
    div.append(name);
    
    var validName = document.createElement('div');
    validName.classList = 'msg-valid valid-name';
    div.append(validName);

    popupBody.append(div)

    var div = document.createElement('div');
    div.classList = 'form-group';

    var phone = document.createElement('input');
    phone.classList = "form-control";
    phone.id = "phone";
    phone.placeholder = "Телефон:";
    phone.dataset.controller = "inputMask";
    phone.type = "text";
    div.append(phone);

    var validPhone = document.createElement('div');
    validPhone.classList = 'msg-valid valid-phone';
    div.append(validPhone);
    popupBody.append(div)

    var div = document.createElement('div');
    div.classList = 'form-group';

    var email = document.createElement('input');
    email.classList = "form-control";
    email.id = "email";
    email.placeholder = 'Адрес электронной почты:';
    email.range = "false";
    email.type = "text";
    div.append(email);

    var validEmail = document.createElement('div');
    validEmail.classList = 'msg-valid valid-email';
    div.append(validEmail);
    popupBody.append(div)

    /* политика */
    var div = document.createElement('div');
    div.classList = 'form-group';

    var formCheck = document.createElement('div');
    formCheck.classList = 'form-check';
    div.append(formCheck);

    var accept = document.createElement('input');
    accept.classList = "form-check-input";
    accept.id = "accept";
    accept.checked = false;
    accept.type = "checkbox";
    formCheck.append(accept);

    var companyText = (el.dataset.company ?? '').toString();
    if (companyText === 'undefined') companyText = '';

    var license = helper.getLicenseLink(Cookies.get('region'));
    var label = document.createElement('label');
    label.setAttribute('for' , 'accept');
    label.innerHTML = `ознакомлен(а) <a class="underline" href="${license}" target="_blank">с условиями политики в отношении обработки персональных данных</a> ${companyText}`;
    
    formCheck.append(label);

    var validAccept = document.createElement('div');
    validAccept.classList = 'msg-valid valid-accept';
    div.append(validAccept);

    popupBody.append(div)

    /* согласие */

    var formCheck = document.createElement('div');
    formCheck.classList = 'form-check';
    div.append(formCheck);

    var acceptPerson = document.createElement('input');
    acceptPerson.classList = "form-check-input";
    acceptPerson.id = "acceptPerson";
    acceptPerson.checked = false;
    acceptPerson.type = "checkbox";
    formCheck.append(acceptPerson);

    var licensePerson = helper.getLicensePersonLink();
    var labelPerson = document.createElement('label');
    labelPerson.setAttribute('for' , 'acceptPerson');
    labelPerson.innerHTML = `даю согласие <a class="underline" href="${licensePerson}" target="_blank">на обработку персональных данных</a>`;
    
    formCheck.append(labelPerson);
    
    var validAcceptPerson = document.createElement('div');
    validAcceptPerson.classList = 'msg-valid valid-acceptPerson';
    div.append(validAcceptPerson);

    popupBody.append(div)
    
    /* капча */
    var divCaptcha = document.createElement('div');
    divCaptcha.id = 'smart-captcha';
    divCaptcha.dataset.controller = 'smartCaptcha';
    popupBody.append(divCaptcha);

    var validGrecaptcha = document.createElement('div');
    validGrecaptcha.classList = 'msg-valid valid-captcha';
    popupBody.append(validGrecaptcha);

    var btnSubmit = document.createElement('button');
    btnSubmit.innerHTML = 'Отправить';
    btnSubmit.classList = 'btn btn-outline-secondary rc mt-3'
    btnSubmit.addEventListener('click', function() {
        var invalid = false;

        if (atob(btnVeretify.dataset.code) == veretifyPhone.value && atob(btnVeretify.dataset.veretify) == phone.value) {
            invalid = false;
        } else {
            validVeretifyPhone.innerHTML = 'Введенное значение неверно';
            invalid = true;
        }
        
        if (validator.checkTextRu(name, validName)) {
            invalid = true;
        }
        
        if (validator.checkPhone(phone, validPhone)) {
            invalid = true;
        }
        
        if (validator.checkEmail(email, validEmail)) {
            invalid = true;
        }

        if (validator.checkAccept(accept, validAccept)) {
            invalid = true;
        }

        if (validator.checkAccept(acceptPerson, validAcceptPerson)) {
            invalid = true;
        }

        if (validator.checkSmartCaptcha(window.smartCaptcha.getResponse(), validGrecaptcha)) {
            invalid = true;
        }

        if (invalid) {
            return false;
        }

        loader.btnLoader(btnSubmit, true);

        helper.sendRequest({'phone': phone.value}, "/api/count-record").then(function (response) {
            if (response.data.count >= 2) {
                alert('Для записи к двум и более врачам-пожалуйста, заполните следующую форму');

                var workDate = new Date(el.dataset.workDate)
                    .toLocaleString('ru', {year: 'numeric',month: 'numeric',day: 'numeric'});
                
                renderFormBitrix(el, name.value, phone.value, workDate);
            } else {
                const data = {
                    'fio': name.value,
                    'phone': phone.value,
                    'email': email.value,
                    'captcha': window.smartCaptcha.getResponse(),
                    'specialist': parseInt(el.dataset.specialistid) ?? 0,
                    'filial': parseInt(el.dataset.filialid) ?? 0,
                    'schedident': parseInt(el.dataset.schedident) ?? 0,
                    'workDate': el.dataset.workDate.replace(/-/g, ''),
                    'rnum': el.dataset.rnum ?? 0,
                    'time': el.dataset.time
                };

                helper.sendRequest(data, '/api/anonymous-reserve').then(function(reserve) {

                    if (location.hostname == 'cabinet.sovamed.ru' || location.hostname == 'cabinet.wmtmed.ru') {
                        var subject = 'Запись в без авторизации с ЛК';
                        var tag = 'анонимная_запись';
                    } else {
                        var subject = 'Запись в без авторизации с сайта';
                        var tag = 'анонимная_запись_с_сайта';
                    }

                    let searchParams = new URLSearchParams(location.search);

                    var data = {
                        'subject': subject,
                        'requestUrl': location.href,
                        'sessionId': helper.getSessionId(),
                        'phoneNumber': phone.value,
                        'email': email.value,
                        'fio': name.value,
                        'tag': tag,
                        'comment' : {
                            'docName': el.dataset.docname,
                            'address': el.dataset.address,
                            'specialistId': el.dataset.specialistid,
                            'filialId': el.dataset.filialid,
                            'schedident': el.dataset.schedident,
                            'workDate': el.dataset.workDate,
                            'time': el.dataset.time
                        },
                        'customSources': {
                            "source": searchParams.get('utm_source'),
                            "medium": searchParams.get('utm_medium'),
                            "campaign": searchParams.get('utm_campaign'),
                            "content": searchParams.get('utm_content'),
                            "term": searchParams.get('utm_term')
                        }                       
                    }

                    if (window.bitrix === true) {
                        data.regionId = helper.getRegionIdByHost()
                    }

                    helper.sendRequest(data, '/api/add-calltouch').then(function(calltouch) {
                        loader.btnLoader(btnSubmit, false);

                        if (typeof window.bitrix === 'undefined') {
                            var date = new Date(el.dataset.workDate);
                            var successAlert = document.createElement('div');
                            successAlert.classList = 'alert alert-success alert-dismissible fade show';
                            successAlert.setAttribute('role', 'alert');

                            var divMsg = document.createElement('div');
                            divMsg.classList = 'alert-msg';
                            divMsg.innerHTML = '<p>Запись на прием подтверждена.</p><p>Врач - '
                             + el.dataset.docname +'</p><p>Клиника - '
                             + el.dataset.address +'</p><p>Дата - '
                             + window.dateFormat(date, 'd.m.Y') + ' ' + el.dataset.time +'</p>'
                            successAlert.append(divMsg);

                            var buttonClose = document.createElement('button');
                            buttonClose.classList = 'close';
                            buttonClose.dataset.dismiss ='alert';
                            buttonClose.setAttribute('aria-label', 'Close');
                            buttonClose.innerHTML = '<span aria-hidden="true">&times;</span>';
                            successAlert.append(buttonClose);
                            document.getElementById('alert-system').prepend(successAlert);

                            $('html, body').animate({scrollTop:0}, '300');
                        }

                        renderCheckEvent(reserve.data.hash, reserve.data.recordId);
                    });
                }).catch(function(e) {
                    loader.btnLoader(btnSubmit, false);
                    console.log(e);
                });
            }
        })

    });
    
    var inputGroup = document.createElement('div');
    inputGroup.classList = 'input-group mt-3 veretify-code-block';

    var veretifyPhone = document.createElement('input');
    veretifyPhone.classList = "form-control";
    veretifyPhone.id = "veretify-code";
    veretifyPhone.name = "code";
    veretifyPhone.type = "text";
    veretifyPhone.placeholder = "Код из СМС"
    inputGroup.append(veretifyPhone);

    var appendDiv = document.createElement('div');
    appendDiv.classList = 'input-group-append';

    var btnVeretify = document.createElement('button');
    btnVeretify.innerHTML = 'Получить код';
    btnVeretify.dataset.step = 0;
    btnVeretify.dataset.status = 'false'
    btnVeretify.classList = 'btn btn-outline-secondary'
    btnVeretify.addEventListener('click', function(evn) {
        loader.btnLoader(btnVeretify, true);
        validVeretifyPhone.innerHTML = '';
        var invalid = false;

         
        if (validator.checkPhone(phone, validPhone)) {
            invalid = true;
        }
       
        if (validator.checkSmartCaptcha(window.smartCaptcha.getResponse(), validGrecaptcha)) {
            invalid = true;
        }

        if (validator.checkAccept(accept, validAccept)) {
            invalid = true;
        }
        
        if (validator.checkAccept(acceptPerson, validAcceptPerson)) {
            invalid = true;
        }

        if (invalid) {
            loader.btnLoader(btnVeretify, false);
            return false;
        }

        if (btnVeretify.dataset.status == "false") {
            helper.sendRequest({'phone' : phone.value, 'pcode': popup.dataset.pcode}, "/api/veretify").then(function (response) {
                const myCounter = new helper.countDown({
                    seconds: 60,
                    onUpdateStatus: function(sec) {
                        veretifyPhone.placeholder = 'Введите код из СМС: ' + sec + ' сек';

                    },
                    onCounterEnd: function() {
                        if (btnVeretify.dataset.step == '1') {
                            notsms.classList.remove('d-none');
                        }

                        if (btnVeretify.dataset.step == '0') {
                            btnVeretify.dataset.status = "false";
                            btnVeretify.innerHTML = "Получить код"
                            btnVeretify.dataset.code = 'false';
                            btnVeretify.dataset.veretify = 'false';
                            btnVeretify.dataset.step = '1';
                        }
                    }
                });
                myCounter.start();

                if (response.status == 'ERROR') {
                    loader.btnLoader(btnVeretify, false);
                    validVeretifyPhone.innerHTML = response.status_text
                    return false;
                }

                if (response.status == 'OK') {
                    btnVeretify.dataset.status = "OK"
                    btnVeretify.innerHTML = "OK"   
                    btnVeretify.dataset.code = response.code;
                    btnVeretify.dataset.veretify = btoa(phone.value);
                }
            })
        } else if (btnVeretify.dataset.status == "OK") {
            if (atob(btnVeretify.dataset.code) == veretifyPhone.value && atob(btnVeretify.dataset.veretify) == phone.value) {
                inputGroup.classList.remove('veretify-code-block');
                inputGroup.classList.add('d-none');
                popupBody.append(btnSubmit);
            } else {
                validVeretifyPhone.innerHTML = 'Введенное значение неверно';
            }
        }

        loader.btnLoader(btnVeretify, false);
    });
    appendDiv.append(btnVeretify);
    inputGroup.append(appendDiv);

    var validVeretifyPhone = document.createElement('div');
    validVeretifyPhone.classList = 'msg-valid valid-veretify-phone w-100';
    inputGroup.append(validVeretifyPhone);

    var notsms = document.createElement('a');
    notsms.href="#";
    notsms.classList = 'd-none w-100';
    notsms.innerHTML = 'Не приходит код';
    notsms.addEventListener('click', function () {
        var workDate = new Date(el.dataset.workDate)
            .toLocaleString('ru', {year: 'numeric',month: 'numeric',day: 'numeric'});

        if (btnVeretify.dataset.step == '1') {
            renderFormBitrix(el, name.value, phone.value, workDate, true);
        }
    });
    inputGroup.append(notsms);
    popupBody.append(inputGroup)
}

function validateData(data) {
    const requiredFields = ['st', 'date', 'dcode', 'depnum', 'filial', 'schedident'];

    for (let field of requiredFields) {
        if (data[field] == "undefined" || data[field] == "NaNaNaN") {
            return false;
        }
    }

    return true;
}

function sendReserve(el) {
    if (el.dataset.onlinemode === 'true') {
        var onlineMode = 1;
    } else {
        var onlineMode = 0;
    }

    var workDate = new Date(el.dataset.workDate);
    var time = el.dataset.time.split('-');
    var button = el.querySelector('.submit'); 

    loader.btnLoader(button, true);

    let dataSchedule = {
        st: time[0],
        en: time[1],
        date: window.dateFormat(workDate),
        dcode: el.dataset.specialistid,
        depnum: el.dataset.depnum,
        filial: el.dataset.filialid,
        onlineType: onlineMode,
        schedident: el.dataset.schedident
    };

    const isValid = validateData(dataSchedule);

    if (isValid) {
        window.webSDK.scheduleRecReserve(dataSchedule).then(function (resolve) {
            helper.sendRequest({'sid': el.dataset.specialistid}, '/api/doctor?sid='+ el.dataset.specialistid, 'GET').then(function (doctor) {

                loader.btnLoader(button, false);

                if (location.hostname == 'cabinet.sovamed.ru' || location.hostname == 'cabinet.wmtmed.ru') {
                    var subject = 'Прямая запись с ЛК';
                    var tag = 'прямая_запись';
                } else {
                    var subject = 'Запись с сайта';
                    var tag = 'сайт_запись';
                }

                let searchParams = new URLSearchParams(location.search);
                var data = {
                    'subject': subject,
                    'requestUrl': location.href,
                    'sessionId': helper.getSessionId(),
                    'phoneNumber': window.webSDK.data.user.phone,
                    'email': window.webSDK.data.user.email,
                    'fio': window.webSDK.data.user.fullName,
                    'tag': tag,
                    'comment' : {
                        'docName': doctor.data.name,
                        'address': doctor.data.filial.address,
                        'specialistId':  doctor.data.sid,
                        'filialId': el.dataset.filialid,
                        'schedident': el.dataset.schedident,
                        'workDate': el.dataset.workDate,
                        'time': el.dataset.time
                    },
                    'customSources': {
                        "source": searchParams.get('utm_source'),
                        "medium": searchParams.get('utm_medium'),
                        "campaign": searchParams.get('utm_campaign'),
                        "content": searchParams.get('utm_content'),
                        "term": searchParams.get('utm_term')
                    }
                }

                if (window.bitrix === true) {
                    data.regionId = helper.getRegionIdByHost()
                }

                helper.sendRequest(data, '/api/add-calltouch').then(function() {
                    if (window.bitrix === true) {
                        var popup = document.getElementById('popup')
                        popup.querySelector('.modal-title').innerHTML = 'Запись на прием';
                        var message = '<p>Спасибо, Вы успешно записались на прием. </br>';
                        message += popup.dataset.comment + ', ';
                        message += popup.dataset.workDate + ' ' + popup.dataset.time + '</br></p>';
                        message += '<p>Вы всегда можете отменить или перенести запись в личном кабинете по ссылке: ';
                        message += '<a href="https://cabinet.sovamed.ru" >https://cabinet.sovamed.ru</a></p>';
                        popup.querySelector('#popup-body').innerHTML = message;
                    } else {
                        // Показываем уведомление о записи в попапе перед редиректом
                        var popup = document.getElementById('popup');
                        if (popup) {
                            popup.querySelector('.modal-title').innerHTML = 'Запись на прием';
                            var message = '<p>Спасибо, Вы успешно записались на прием. </br>';
                            if (popup.dataset.comment) {
                                message += popup.dataset.comment + ', ';
                            }
                            message += popup.dataset.workDate + ' ' + popup.dataset.time + '</br></p>';
                            if (onlineMode) {
                                message += '<p class="alert alert-warning">При отсутствии оплаты в течение 5 мин. онлайн консультация будет автоматически отменена.</p>';
                            }
                            message += '<p>Вы будете перенаправлены в раздел "Приемы"...</p>';
                            popup.querySelector('#popup-body').innerHTML = message;
                            $(popup).modal('show');
                        }
                        
                        // Показываем уведомление в alert-system
                        var alertSystem = document.getElementById('alert-system');
                        if (alertSystem) {
                            var msg = onlineMode 
                                ? 'Спасибо, вы успешно записались на онлайн-консультацию. При отсутствии оплаты в течение 5 мин. онлайн консультация будет автоматически отменена.'
                                : 'Спасибо, вы успешно записались на прием.';
                            helper.addAlert(msg, alertSystem, 'alert-record-success', 'alert-success');
                        }
                        
                        // Делаем редирект на /case-history#doctor-success после успешного создания записи
                        setTimeout(function() {
                            const to = onlineMode 
                                ? '/case-history#online' 
                                : '/case-history#doctor-success'
                            ;

                            window.location.replace(helper.getHostname() + to);
                        }, 2000);
                    }
                });
            });
        }).catch(function (error) {
            loader.btnLoader(button, false);

            var alert = document.createElement('div');
            alert.setAttribute('role', 'alert');

            var divMsg = document.createElement('div');
            divMsg.classList = 'alert-msg';

            if (error.data.message !== '') {
                divMsg.innerHTML = error.data.message ;
            }

            if (error.data.checkData.text !== '') {
                divMsg.innerHTML = error.data.checkData.text;
            }

            alert.append(divMsg);


            if (window.bitrix === true) {
                alert.classList = 'alert alert-danger';
                document.getElementById('popup-body').prepend(alert);
            } else {
                alert.classList = 'alert alert-danger alert-dismissible fade show';
                var buttonClose = document.createElement('button');
                buttonClose.classList = 'close';
                buttonClose.dataset.dismiss ='alert';
                buttonClose.setAttribute('aria-label', 'Close');
                buttonClose.innerHTML = '<span aria-hidden="true">&times;</span>';
                alert.append(buttonClose);

                document.getElementById('alert-system').prepend(alert);
                $(el).modal('hide');
                $('html, body').animate({scrollTop:0}, '300');
            }
        });
    }
}

module.exports = {
    sendReserve: sendReserve,
    renderFormRecord: renderFormRecord,
    renderFormBitrix: renderFormBitrix,
    renderFormAnonym: renderFormAnonym
};