frappe.ui.form.on('Asan Login', {
    refresh: function(frm) {
        // Остановить любые существующие интервалы
        if (window.authStatusInterval) {
            clearInterval(window.authStatusInterval);
            window.authStatusInterval = null;
        }

        // Кнопка для E-Taxes Login (переименованная "Login with Asan Imza")
        frm.add_custom_button(__('E-Taxes Login'), function() {
            // Проверяем, что поля phone и user_id заполнены
            if (!frm.doc.phone || !frm.doc.user_id) {
                frappe.msgprint(__('Please fill in Phone and User ID fields'));
                return;
            }

            // Показываем сообщение о том, что запрос отправлен
            frappe.show_alert({
                message: __('Authentication request sent. Please confirm on your phone.'),
                indicator: 'blue'
            }, 5);

            // Отправляем запрос для начала процесса аутентификации
            frappe.call({
                method: 'invoice_az.auth.handle_authentication',
                args: {
                    'asan_login_name': frm.doc.name
                },
                callback: function(r) {
                    if (r.message && r.message.success) {
                        // Сохраняем токен в документе и запускаем опрос статуса
                        if (r.message.bearer_token) {
                            frm.set_value('bearer_token', r.message.bearer_token);
                        }

                        // Запускаем опрос статуса
                        startPollingWithTimeout(frm);

                        // Задержка, чтобы дать диалогу полностью создаться
                        setTimeout(function() {
                            // Если есть код верификации, отображаем его
                            if (r.message.verification_code) {
                                // Явно указываем текст кода
                                $('#verification_code').text(r.message.verification_code);

                                // Отображаем контейнер кода верификации
                                $('#verification_code_container').show();

                                // Принудительно устанавливаем стиль отображения
                                $('#verification_code_container').attr('style', 'display: block !important; margin-top: 15px;');
                            }
                        }, 500); // Задержка 500 мс для полной инициализации DOM
                    } else {
                        // Показываем сообщение об ошибке
                        frappe.msgprint({
                            title: __('Error'),
                            indicator: 'red',
                            message: r.message ? r.message.message : __('Authentication request failed.')
                        });
                    }
                }
            });
        }, __('Login'));

        // Кнопка для ƏMAS Login (все в 1 клик)
        frm.add_custom_button(__('ƏMAS Login'), function() {
            // Проверяем, что поля phone и user_id заполнены
            if (!frm.doc.phone || !frm.doc.user_id) {
                frappe.msgprint(__('Please fill in Phone and User ID fields'));
                return;
            }

            // Запускаем весь процесс ƏMAS в 1 клик
            start_amas_one_click_connection(frm);
        }, __('Login'));
        
        // Кнопка для получения сертификатов (доступна только если авторизация успешна)
        if (frm.doc.auth_status === 'Authenticated' || frm.doc.auth_status === 'Fully Authenticated') {
            frm.add_custom_button(__('Get Certificates'), function() {
                frappe.call({
                    method: 'invoice_az.auth.get_auth_certificates',
                    args: {
                        'asan_login_name': frm.doc.name
                    },
                    callback: function(r) {
                        if (r.message && r.message.success) {
                            // Обновляем форму после успешного получения сертификатов
                            frm.reload_doc();
                            
                            // Отображаем список сертификатов в диалоговом окне
                            if (r.message.certificates) {
                                showCertificatesDialog(r.message.certificates, frm);
                            }
                        } else if (r.message && r.message.unauthorized) {
                            // Если ошибка авторизации, предлагаем авторизоваться заново
                            showAuthDialog(frm);
                        } else {
                            // Другие ошибки
                            frappe.msgprint({
                                title: __('Error'),
                                indicator: 'red',
                                message: r.message ? r.message.message : __('Failed to get certificates')
                            });
                        }
                    }
                });
            }, __('Actions'));
        }
        
        // Кнопка для выбора налогоплательщика (доступна если авторизация успешна и сертификат выбран)
        if ((frm.doc.auth_status === 'Authenticated' || frm.doc.auth_status === 'Fully Authenticated') && 
            frm.doc.selected_certificate) {
            frm.add_custom_button(__('Choose Taxpayer'), function() {
                frappe.call({
                    method: 'invoice_az.auth.select_taxpayer',
                    args: {
                        'asan_login_name': frm.doc.name
                    },
                    callback: function(r) {
                        if (r.message && r.message.success) {
                            // Обновляем форму после успешного выбора налогоплательщика
                            frm.reload_doc();
                            
                            // Показываем сообщение об успешном выборе
                            frappe.msgprint({
                                title: __('Success'),
                                indicator: 'green',
                                message: __('Taxpayer selected successfully')
                            });
                        } else if (r.message && r.message.unauthorized) {
                            // Если ошибка авторизации, предлагаем авторизоваться заново
                            showAuthDialog(frm);
                        } else {
                            // Другие ошибки
                            frappe.msgprint({
                                title: __('Error'),
                                indicator: 'red',
                                message: r.message ? r.message.message : __('Failed to select taxpayer')
                            });
                        }
                    }
                });
            }, __('Actions'));
        }
        
        // Обработчик изменения выбранного сертификата
        if (frm.doc.certificates_json) {
            try {
                const certificates = JSON.parse(frm.doc.certificates_json);
                
                frm.add_custom_button(__('Select Certificate'), function() {
                    showCertificatesDialog(certificates, frm);
                }, __('Actions'));
            } catch (e) {
                console.error('Error parsing certificates JSON:', e);
            }
        }
    },
    
    // Обработчик изменения выбранного сертификата (введенного вручную)
    selected_certificate: function(frm) {
        // Только если поле не пустое и сертификаты доступны
        if (frm.doc.selected_certificate && frm.doc.certificates_json) {
            try {
                // Получаем данные сертификатов
                const certificates = JSON.parse(frm.doc.certificates_json);
                if (!Array.isArray(certificates) || certificates.length === 0) return;
                
                // Ищем сертификат по имени или его части
                const searchStr = frm.doc.selected_certificate.toLowerCase();
                
                // Сначала пытаемся найти точное совпадение по имени и идентификатору
                let foundCert = null;
                let foundIndex = -1;
                
                for (let i = 0; i < certificates.length; i++) {
                    const cert = certificates[i];
                    let certName = '';
                    let certId = '';
                    
                    if (cert.taxpayerType === 'individual' && cert.individualInfo) {
                        certName = cert.individualInfo.name || '';
                        certId = cert.individualInfo.fin || '';
                    } else if (cert.legalInfo) {
                        certName = cert.legalInfo.name || '';
                        certId = cert.legalInfo.voen || cert.legalInfo.tin || '';
                    }
                    
                    const fullName = `${certName} (${certId})`.toLowerCase();
                    
                    // Проверяем точное совпадение или содержание строки поиска
                    if (fullName === searchStr || fullName.includes(searchStr)) {
                        foundCert = cert;
                        foundIndex = i;
                        break;
                    }
                }
                
                // Если нашли совпадение, устанавливаем данные сертификата
                if (foundCert) {
                    frm.set_value('selected_certificate_index', foundIndex);
                    frm.set_value('selected_certificate_json', JSON.stringify(foundCert, null, 2));
                    
                    frappe.show_alert({
                        message: __('Certificate found and selected'),
                        indicator: 'green'
                    }, 3);
                }
            } catch (e) {
                console.error('Error processing certificate selection:', e);
            }
        }
    }
});

// Функция для запуска опроса через setTimeout вместо setInterval
function startPollingWithTimeout(frm, successCallback) {
    console.log('startPollingWithTimeout function has been called');
    
    // Отображаем индикатор загрузки
    frm.page.set_indicator(__('Waiting for confirmation'), 'orange');
    
    // Создаем всплывающее окно с информацией
    const status_dialog = new frappe.ui.Dialog({
        title: __('Authentication Status'),
        fields: [
            {
                fieldname: 'status_html',
                fieldtype: 'HTML',
                options: `
                    <div class="text-center">
                        <div class="lds-dual-ring" style="display: inline-block; width: 64px; height: 64px;">
                            <div style="width: 64px; height: 64px; border: 6px solid #4e73df; border-radius: 50%; border-color: #4e73df transparent #4e73df transparent; animation: lds-dual-ring 1.2s linear infinite;"></div>
                        </div>
                        <style>
                            @keyframes lds-dual-ring {
                                0% { transform: rotate(0deg); }
                                100% { transform: rotate(360deg); }
                            }
                        </style>
                        <div class="mt-3" id="status_message">
                            <h4>Waiting for confirmation on your phone</h4>
                            <p>Please check your phone and confirm the authentication request.</p>
                        </div>
                        <!-- Блок для отображения кода верификации -->
                        <div id="verification_code_container" style="display:none; margin-top: 15px;">
                            <div style="background: #f8f9fa; padding: 10px; display: inline-block; border-radius: 5px; font-size: 24px; font-weight: bold; letter-spacing: 2px; color: #333; border: 1px solid #ddd;">
                                <span id="verification_code">----</span>
                            </div>
                            <p style="margin-top: 5px; font-size: 12px; color: #666;">Verification Code</p>
                        </div>
                    </div>
                `
            }
        ],
        primary_action_label: __('Cancel'),
        primary_action: function() {
            // Остановить опрос
            window.stopPolling = true;
            status_dialog.hide();
            frm.page.clear_indicator();
            frm.reload_doc();
        }
    });
    
    status_dialog.show();
    
    // Счетчик попыток и флаг для остановки опроса
    let attempts = 0;
    const maxAttempts = 20; // 2 минут (20 попыток с интервалом 5 секунд)
    window.stopPolling = false;
    
    // Функция опроса
    function pollAuthStatus() {
        // Если достигнуто максимальное количество попыток или установлен флаг остановки
        if (attempts >= maxAttempts || window.stopPolling) {
            console.log('Polling stopped: ' + (attempts >= maxAttempts ? 'max attempts reached' : 'manually cancelled'));
            
            if (attempts >= maxAttempts) {
                // Обновляем информацию в диалоговом окне по таймауту
                $('#status_message').html(`
                    <h4 style="color: red;">Authentication Timeout</h4>
                    <p>The authentication request has timed out. Please try again.</p>
                `);
                $('.lds-dual-ring').css('display', 'none');
                
                // Скрываем код верификации при таймауте
                $('#verification_code_container').hide();
                
                // Обновляем поле auth_status и сохраняем
                frm.set_value('auth_status', 'Failed');
                
                // Меняем кнопку на "Close"
                status_dialog.set_primary_action(__('Close'), function() {
                    status_dialog.hide();
                    
                    // Сохраняем документ и затем обновляем его с сервера
                    frm.save().then(() => frm.reload_doc());
                });
            }
            
            return;
        }
        
        attempts++;
        
        // Проверяем статус авторизации
        frappe.call({
            method: 'invoice_az.auth.poll_auth_status',
            args: {
                'asan_login_name': frm.doc.name,
                'bearer_token': frm.doc.bearer_token
            },
            callback: function(r) {
                if (r.message && r.message.success) {
                    if (r.message.authenticated) {
                        // Авторизация успешна
                        window.stopPolling = true;
                        
                        // Обновляем информацию в диалоговом окне
                        $('#status_message').html(`
                            <h4 style="color: green;">Authentication Successful!</h4>
                            <p>You are now authenticated. The page will reload shortly.</p>
                        `);
                        $('.lds-dual-ring').css('display', 'none');
                        $('.lds-dual-ring').html(`
                            <div style="width: 64px; height: 64px; display: flex; align-items: center; justify-content: center;">
                                <i class="fa fa-check" style="font-size: 48px; color: #5cb85c;"></i>
                            </div>
                        `);
                        
                        // НЕ скрываем код верификации при успешной аутентификации
                        
                        // Обновляем кнопку
                        status_dialog.set_primary_action(__('Continue'), function() {
                            status_dialog.hide();
                            
                            // Вызываем callback после успешной аутентификации, если он предоставлен
                            if (typeof successCallback === 'function') {
                                successCallback();
                            } else {
                                frm.reload_doc();
                            }
                        });
                        
                        // Автоматически закрываем диалог через 2 секунды
                        setTimeout(function() {
                            status_dialog.hide();
                            
                            // Вызываем callback после успешной аутентификации, если он предоставлен
                            if (typeof successCallback === 'function') {
                                successCallback();
                            } else {
                                frm.reload_doc();
                            }
                        }, 2000);
                    } else {
                        // Продолжаем опрос
                        setTimeout(pollAuthStatus, 5000);
                    }
                } else {
                    // Если ошибка, останавливаем опрос и показываем сообщение
                    window.stopPolling = true;
                    
                    // Обновляем информацию в диалоговом окне
                    $('#status_message').html(`
                        <h4 style="color: red;">Authentication Error</h4>
                        <p>${r.message ? r.message.message : 'An unknown error occurred.'}</p>
                    `);
                    $('.lds-dual-ring').css('display', 'none');
                    $('.lds-dual-ring').html(`
                        <div style="width: 64px; height: 64px; display: flex; align-items: center; justify-content: center;">
                            <i class="fa fa-times" style="font-size: 48px; color: #d9534f;"></i>
                        </div>
                    `);
                    
                    // Скрываем код верификации при ошибке
                    $('#verification_code_container').hide();
                    
                    // Обновляем поле auth_status
                    frm.set_value('auth_status', 'Failed');
                    
                    // Меняем кнопку на "Close"
                    status_dialog.set_primary_action(__('Close'), function() {
                        status_dialog.hide();
                        
                        // Сохраняем документ и затем обновляем его с сервера
                        frm.save().then(() => frm.reload_doc());
                    });
                }
            },
            error: function(err) {
                // В случае ошибки продолжаем опрос
                console.error('Error during status check:', err);
                setTimeout(pollAuthStatus, 5000);
            }
        });
    }
    
    // Начинаем опрос
    console.log('Starting first polling attempt');
    pollAuthStatus();
}

// Функция для отображения сертификатов в диалоговом окне
function showCertificatesDialog(certificates, frm) {
    if (!certificates || !certificates.length) {
        frappe.msgprint(__('No certificates data to display'));
        return;
    }
    
    // Создаем таблицу с сертификатами
    var cert_table = '<div style="max-height: 500px; overflow-y: auto;"><table class="table table-bordered">';
    cert_table += '<thead><tr>' +
                '<th>Type</th>' +
                '<th>Name</th>' +
                '<th>ID</th>' +
                '<th>Position</th>' +
                '<th>Status</th>' +
                '<th>Action</th>' +
                '</tr></thead><tbody>';
    
    certificates.forEach(function(cert, index) {
        var name = '';
        var id = '';
        
        if (cert.taxpayerType === 'individual' && cert.individualInfo) {
            name = cert.individualInfo.name || '';
            id = cert.individualInfo.fin || '';
        } else if (cert.legalInfo) {
            name = cert.legalInfo.name || '';
            id = cert.legalInfo.tin || cert.legalInfo.voen || '';
        }        
        
        cert_table += '<tr>' +
                    '<td>' + (cert.taxpayerType || '') + '</td>' +
                    '<td>' + name + '</td>' +
                    '<td>' + id + '</td>' +
                    '<td>' + (cert.position || '') + '</td>' +
                    '<td>' + (cert.hasAccess ? 'Active' : 'Inactive') + 
                      (cert.liquidated ? ' (Liquidated)' : '') + '</td>' +
                    '<td><button class="btn btn-xs btn-primary select-cert" data-index="' + index + '">Select</button></td>' +
                    '</tr>';
    });
    
    cert_table += '</tbody></table></div>';
    
    // Отображаем диалоговое окно с таблицей
    var d = new frappe.ui.Dialog({
        title: __('Certificates List'),
        fields: [{
            fieldtype: 'HTML',
            fieldname: 'certificate_list',
            options: cert_table
        }],
        primary_action_label: __('Close'),
        primary_action: function() {
            d.hide();
        }
    });
    
    d.show();
    
    // Добавляем обработчик для кнопки выбора сертификата
    d.$wrapper.find('.select-cert').on('click', function() {
        var index = $(this).data('index');
        var cert = certificates[index];
        
        // Получаем имя для отображения
        let certName = '';
        if (cert.taxpayerType === 'individual' && cert.individualInfo) {
            certName = `${cert.individualInfo.name} (${cert.individualInfo.fin})`;
        } else if (cert.legalInfo) {
            certName = `${cert.legalInfo.name} (${cert.legalInfo.voen || cert.legalInfo.tin})`;
        } else {
            certName = `Certificate ${index + 1}`;
        }
        
                        // Отправляем запрос на выбор сертификата
        frappe.call({
            method: 'invoice_az.auth.select_certificate',
            args: {
                'asan_login_name': frm.doc.name,
                'certificate_data': cert,
                'certificate_name': certName
            },
            callback: function(r) {
                if (r.message && r.message.success) {
                    frappe.show_alert({
                        message: __('Certificate selected. Choosing taxpayer automatically...'),
                        indicator: 'blue'
                    }, 3);
                    
                    d.hide();
                    
                    // После успешного выбора сертификата автоматически вызываем выбор налогоплательщика
                    frappe.call({
                        method: 'invoice_az.auth.select_taxpayer',
                        args: {
                            'asan_login_name': frm.doc.name
                        },
                        callback: function(r2) {
                            if (r2.message && r2.message.success) {
                                frappe.show_alert({
                                    message: __('Taxpayer selected automatically'),
                                    indicator: 'green'
                                }, 5);
                                
                                // Перезагружаем страницу для обновления данных
                                frm.reload_doc();
                            } else if (r2.message && r2.message.unauthorized) {
                                // Если ошибка авторизации, предлагаем авторизоваться заново
                                showAuthDialog(frm);
                            } else {
                                frappe.msgprint({
                                    title: __('Error'),
                                    indicator: 'red',
                                    message: r2.message ? r2.message.message : __('Failed to select taxpayer automatically')
                                });
                                
                                // Все равно перезагружаем страницу, чтобы отобразить выбранный сертификат
                                frm.reload_doc();
                            }
                        }
                    });
                } else if (r.message && r.message.unauthorized) {
                    d.hide();
                    
                    // Если ошибка авторизации, предлагаем авторизоваться заново
                    showAuthDialog(frm);
                } else {
                    frappe.msgprint({
                        title: __('Error'),
                        indicator: 'red',
                        message: r.message ? r.message.message : __('Failed to select certificate')
                    });
                }
            }
        });
    });
}

// Функция для отображения диалога повторной аутентификации
function showAuthDialog(frm) {
    var d = new frappe.ui.Dialog({
        title: __('Authentication Required'),
        fields: [
            {
                fieldname: 'message',
                fieldtype: 'HTML',
                options: `
                    <div class="text-center">
                        <p>Your session has expired or authentication is required.</p>
                        <p>Would you like to authenticate again?</p>
                    </div>
                `
            }
        ],
        primary_action_label: __('Authenticate'),
        primary_action: function() {
            d.hide();
            
            // Показываем сообщение о начале аутентификации
            frappe.show_alert({
                message: __('Starting authentication process...'),
                indicator: 'blue'
            }, 3);
            
            // Вызываем процесс аутентификации
            frappe.call({
                method: 'invoice_az.auth.handle_authentication',
                args: {
                    'asan_login_name': frm.doc.name
                },
                freeze: true,
                freeze_message: __('Sending authentication request...'),
                callback: function(r) {
                    if (r.message && r.message.success) {
                        // Получаем bearer_token из ответа
                        const bearerToken = r.message.bearer_token;
                        
                        // Обновляем значение в документе
                        frm.set_value('bearer_token', bearerToken);
                        
                        // Запускаем опрос с передачей сертификата и налогоплательщика как callback
                        // для автоматического восстановления сессии
                        pollAuthenticationStatus(frm, function() {
                            // После успешной аутентификации проверяем, был ли ранее выбран сертификат
                            if (frm.doc.selected_certificate_json) {
                                try {
                                    var certData = JSON.parse(frm.doc.selected_certificate_json);
                                    var certName = frm.doc.selected_certificate;
                                    
                                    frappe.show_alert({
                                        message: __('Automatically restoring your session...'),
                                        indicator: 'blue'
                                    }, 3);
                                    
                                    // Сначала восстанавливаем сертификат
                                    frappe.call({
                                        method: 'invoice_az.auth.select_certificate',
                                        args: {
                                            'asan_login_name': frm.doc.name,
                                            'certificate_data': certData,
                                            'certificate_name': certName
                                        },
                                        callback: function(r) {
                                            if (r.message && r.message.success) {
                                                // Затем восстанавливаем налогоплательщика
                                                frappe.call({
                                                    method: 'invoice_az.auth.select_taxpayer',
                                                    args: {
                                                        'asan_login_name': frm.doc.name
                                                    },
                                                    callback: function(r2) {
                                                        if (r2.message && r2.message.success) {
                                                            frappe.show_alert({
                                                                message: __('Session restored successfully'),
                                                                indicator: 'green'
                                                            }, 5);
                                                        } else {
                                                            frappe.show_alert({
                                                                message: __('Partial session restore - please select certificate manually'),
                                                                indicator: 'orange'
                                                            }, 5);
                                                        }
                                                        
                                                        // Обновляем документ с сервера
                                                        frm.reload_doc();
                                                    }
                                                });
                                            } else {
                                                frappe.show_alert({
                                                    message: __('Please select your certificate manually'),
                                                    indicator: 'orange'
                                                }, 5);
                                                
                                                // Обновляем документ с сервера
                                                frm.reload_doc();
                                            }
                                        }
                                    });
                                } catch (e) {
                                    console.error('Error restoring certificate:', e);
                                    frm.reload_doc();
                                }
                            } else {
                                // Если сертификат не выбран, просто обновляем документ
                                frm.reload_doc();
                            }
                        });
                    } else {
                        // Показываем сообщение об ошибке
                        frappe.msgprint({
                            title: __('Error'),
                            indicator: 'red',
                            message: r.message ? r.message.message : __('Authentication request failed.')
                        });
                    }
                }
            });
        },
        secondary_action_label: __('Cancel'),
        secondary_action: function() {
            d.hide();
        }
    });
    
    d.show();
}

// Отдельная функция для опроса статуса аутентификации
function pollAuthenticationStatus(frm, successCallback) {
    // Создаем всплывающее окно с информацией
    const status_dialog = new frappe.ui.Dialog({
        title: __('Authentication Status'),
        fields: [
            {
                fieldname: 'status_html',
                fieldtype: 'HTML',
                options: `
                    <div class="text-center">
                        <div class="lds-dual-ring" style="display: inline-block; width: 64px; height: 64px;">
                            <div style="width: 64px; height: 64px; border: 6px solid #4e73df; border-radius: 50%; border-color: #4e73df transparent #4e73df transparent; animation: lds-dual-ring 1.2s linear infinite;"></div>
                        </div>
                        <style>
                            @keyframes lds-dual-ring {
                                0% { transform: rotate(0deg); }
                                100% { transform: rotate(360deg); }
                            }
                        </style>
                        <div class="mt-3" id="poll_status_message">
                            <h4>Waiting for confirmation on your phone</h4>
                            <p>Please check your phone and confirm the authentication request.</p>
                        </div>
                    </div>
                `
            }
        ],
        primary_action_label: __('Cancel'),
        primary_action: function() {
            // Останавливаем опрос и скрываем диалог
            stopPolling = true;
            status_dialog.hide();
            
            // Обновляем документ с сервера
            frm.reload_doc();
        }
    });
    
    status_dialog.show();
    
    // Счетчик попыток и флаг для остановки опроса
    let attempts = 0;
    const maxAttempts = 20; // 20 попыток с интервалом 6 секунд
    let stopPolling = false;
    
    // Функция опроса
    function pollStatus() {
        // Если достигнуто максимальное количество попыток или установлен флаг остановки
        if (attempts >= maxAttempts || stopPolling) {
            console.log('Polling stopped: ' + (attempts >= maxAttempts ? 'max attempts reached' : 'manually cancelled'));
            
            if (attempts >= maxAttempts) {
                // Обновляем информацию в диалоговом окне по таймауту
                $('#poll_status_message').html(`
                    <h4 style="color: red;">Authentication Timeout</h4>
                    <p>The authentication request has timed out. Please try again.</p>
                `);
                $('.lds-dual-ring').css('display', 'none');
                
                // Меняем кнопку на "Close"
                status_dialog.set_primary_action(__('Close'), function() {
                    status_dialog.hide();
                    
                    // Устанавливаем статус "Failed" и перезагружаем документ
                    frm.set_value('auth_status', 'Failed');
                    frm.save().then(() => frm.reload_doc());
                });
            }
            
            return;
        }
        
        attempts++;
        console.log(`Polling auth status, attempt ${attempts} of ${maxAttempts}`);
        
        // Проверяем статус авторизации
        frappe.call({
            method: 'invoice_az.auth.poll_auth_status',
            args: {
                'asan_login_name': frm.doc.name,
                'bearer_token': frm.doc.bearer_token
            },
            callback: function(r) {
                if (r.message && r.message.success) {
                    if (r.message.authenticated) {
                        // Авторизация успешна
                        stopPolling = true;
                        
                        // Обновляем информацию в диалоговом окне
                        $('#poll_status_message').html(`
                            <h4 style="color: green;">Authentication Successful!</h4>
                            <p>You are now authenticated.</p>
                        `);
                        $('.lds-dual-ring').css('display', 'none');
                        
                        // Меняем кнопку на "Continue"
                        status_dialog.set_primary_action(__('Continue'), function() {
                            status_dialog.hide();
                            
                            // Выполняем callback, если он предоставлен
                            if (typeof successCallback === 'function') {
                                successCallback();
                            } else {
                                frm.reload_doc();
                            }
                        });
                    } else {
                        // Продолжаем опрос
                        setTimeout(pollStatus, 6000);
                    }
                } else {
                    // Если ошибка, останавливаем опрос и показываем сообщение
                    stopPolling = true;
                    
                    // Обновляем информацию в диалоговом окне
                    $('#poll_status_message').html(`
                        <h4 style="color: red;">Authentication Error</h4>
                        <p>${r.message ? r.message.message : 'An unknown error occurred.'}</p>
                    `);
                    $('.lds-dual-ring').css('display', 'none');
                    
                    // Меняем кнопку на "Close"
                    status_dialog.set_primary_action(__('Close'), function() {
                        status_dialog.hide();
                        
                        // Устанавливаем статус "Failed" и перезагружаем документ
                        frm.set_value('auth_status', 'Failed');
                        frm.save().then(() => frm.reload_doc());
                    });
                }
            },
            error: function(err) {
                // В случае ошибки продолжаем опрос
                console.error('Error during status check:', err);
                setTimeout(pollStatus, 6000);
            }
        });
    }
    
    // Начинаем опрос
    pollStatus();
}

// Функция для MyGovID Login с диалогом статуса
function startMyGovIDLogin(frm) {
    // Флаг для остановки
    window.mygovidStopLogin = false;

    // Создаем всплывающее окно с информацией
    const status_dialog = new frappe.ui.Dialog({
        title: __('MyGovID Authentication'),
        fields: [
            {
                fieldname: 'status_html',
                fieldtype: 'HTML',
                options: `
                    <div class="text-center">
                        <div class="mygovid-spinner" style="display: inline-block; width: 64px; height: 64px;">
                            <div style="width: 64px; height: 64px; border: 6px solid #4e73df; border-radius: 50%; border-color: #4e73df transparent #4e73df transparent; animation: mygovid-spin 1.2s linear infinite;"></div>
                        </div>
                        <style>
                            @keyframes mygovid-spin {
                                0% { transform: rotate(0deg); }
                                100% { transform: rotate(360deg); }
                            }
                        </style>
                        <div class="mt-3" id="mygovid_status_message">
                            <h4>Waiting for confirmation on your phone</h4>
                            <p>Please check your phone and confirm the authentication request in ASAN Sign app.</p>
                        </div>
                        <!-- Блок для отображения кода верификации -->
                        <div id="mygovid_verification_code_container" style="display:none; margin-top: 15px;">
                            <div style="background: #f8f9fa; padding: 10px; display: inline-block; border-radius: 5px; font-size: 24px; font-weight: bold; letter-spacing: 2px; color: #333; border: 1px solid #ddd;">
                                <span id="mygovid_verification_code">----</span>
                            </div>
                            <p style="margin-top: 5px; font-size: 12px; color: #666;">Verification Code</p>
                        </div>
                    </div>
                `
            }
        ],
        primary_action_label: __('Cancel'),
        primary_action: function() {
            window.mygovidStopLogin = true;
            status_dialog.hide();
            frm.reload_doc();
        }
    });

    status_dialog.show();

    // Start long-polling POST request for login
    frappe.call({
        method: 'invoice_az.invoice_az.doctype.asan_login.asan_login.start_mygovid_login',
        args: {
            'asan_login_name': frm.doc.name
        },
        timeout: 130000, // 130 seconds timeout
        callback: function(r) {
            if (window.mygovidStopLogin) return;

            if (r.message && r.message.success) {
                // Успех
                $('#mygovid_status_message').html(`
                    <h4 style="color: green;">Authentication Successful!</h4>
                    <p>MyGovID token has been saved. The page will reload shortly.</p>
                `);
                $('.mygovid-spinner').css('display', 'none');
                $('.mygovid-spinner').html(`
                    <div style="width: 64px; height: 64px; display: flex; align-items: center; justify-content: center;">
                        <i class="fa fa-check" style="font-size: 48px; color: #5cb85c;"></i>
                    </div>
                `);

                status_dialog.set_primary_action(__('Continue'), function() {
                    status_dialog.hide();
                    frm.reload_doc();
                });

                // Автоматически закрываем через 2 секунды
                setTimeout(function() {
                    status_dialog.hide();
                    frm.reload_doc();
                }, 2000);
            } else {
                // Ошибка
                $('#mygovid_status_message').html(`
                    <h4 style="color: red;">Authentication Failed</h4>
                    <p>${r.message ? r.message.message : 'An unknown error occurred.'}</p>
                `);
                $('.mygovid-spinner').css('display', 'none');
                $('.mygovid-spinner').html(`
                    <div style="width: 64px; height: 64px; display: flex; align-items: center; justify-content: center;">
                        <i class="fa fa-times" style="font-size: 48px; color: #d9534f;"></i>
                    </div>
                `);
                $('#mygovid_verification_code_container').hide();

                status_dialog.set_primary_action(__('Close'), function() {
                    status_dialog.hide();
                    frm.reload_doc();
                });
            }
        },
        error: function() {
            if (window.mygovidStopLogin) return;

            $('#mygovid_status_message').html(`
                <h4 style="color: red;">Authentication Timeout</h4>
                <p>The request timed out. Please try again.</p>
            `);
            $('.mygovid-spinner').css('display', 'none');
            $('#mygovid_verification_code_container').hide();

            status_dialog.set_primary_action(__('Close'), function() {
                status_dialog.hide();
                frm.reload_doc();
            });
        }
    });

    // Get verification code immediately after starting login
    setTimeout(function() {
        frappe.call({
            method: 'invoice_az.invoice_az.doctype.asan_login.asan_login.get_mygovid_verification_code',
            args: { 'asan_login_name': frm.doc.name },
            callback: function(r) {
                if (r.message && r.message.success) {
                    $('#mygovid_verification_code').text(r.message.code);
                    $('#mygovid_verification_code_container').show();
                    $('#mygovid_verification_code_container').attr('style', 'display: block !important; margin-top: 15px;');
                }
            }
        });
    }, 500);
}

// ============================================
// ƏMAS (e-social.gov.az) Integration Functions
// ============================================

function start_amas_one_click_connection(frm) {
    // One-click ƏMAS connection - handles everything automatically

    // Check if MyGovID token exists
    if (!frm.doc.mygovid_token) {
        // No MyGovID token - start full flow with MyGovID login first
        frappe.show_alert({
            message: __('Starting authentication for ƏMAS...'),
            indicator: 'blue'
        }, 3);

        start_mygovid_then_amas(frm);
        return;
    }

    // MyGovID token exists - try to connect directly
    frappe.show_alert({
        message: __('Connecting to ƏMAS...'),
        indicator: 'blue'
    }, 3);

    frappe.call({
        method: 'invoice_az.amas_api.connect_amas',
        args: {
            'asan_login_name': frm.doc.name
        },
        freeze: true,
        freeze_message: __('Connecting to ƏMAS...'),
        callback: function(r) {
            if (r.message && r.message.success) {
                // Connected successfully - show organization selection
                const accounts = r.message.accounts || [];
                if (accounts.length > 0) {
                    frm.reload_doc().then(function() {
                        show_accounts_dialog_with_data(frm, accounts);
                    });
                } else {
                    frappe.msgprint({
                        title: __('Warning'),
                        indicator: 'orange',
                        message: __('ƏMAS connected but no organizations found.')
                    });
                    frm.reload_doc();
                }

            } else if (r.message && r.message.need_mygovid_login) {
                // Token expired or not found - restart with MyGovID login
                frappe.show_alert({
                    message: __('MyGovID token expired. Restarting authentication...'),
                    indicator: 'orange'
                }, 3);

                start_mygovid_then_amas(frm);
            } else {
                frappe.msgprint({
                    title: __('Error'),
                    indicator: 'red',
                    message: r.message ? r.message.message : __('Failed to connect to ƏMAS')
                });
            }
        }
    });
}

function start_mygovid_then_amas(frm) {
    // Show MyGovID login dialog with ƏMAS callback
    frappe.show_alert({
        message: __('Starting MyGovID authentication...'),
        indicator: 'blue'
    }, 3);

    // Create status dialog
    const status_dialog = new frappe.ui.Dialog({
        title: __('MyGovID Authentication for ƏMAS'),
        fields: [
            {
                fieldname: 'status_html',
                fieldtype: 'HTML',
                options: `
                    <div class="text-center">
                        <div class="mygovid-amas-spinner" style="display: inline-block; width: 64px; height: 64px;">
                            <div style="width: 64px; height: 64px; border: 6px solid #4e73df; border-radius: 50%; border-color: #4e73df transparent #4e73df transparent; animation: mygovid-amas-spin 1.2s linear infinite;"></div>
                        </div>
                        <style>
                            @keyframes mygovid-amas-spin {
                                0% { transform: rotate(0deg); }
                                100% { transform: rotate(360deg); }
                            }
                        </style>
                        <div class="mt-3" id="mygovid_amas_status_message">
                            <h4>Waiting for confirmation on your phone</h4>
                            <p>Please check your phone and confirm the authentication request in ASAN Sign app.</p>
                        </div>
                        <div id="mygovid_amas_code_container" style="display:none; margin-top: 15px;">
                            <div style="background: #f8f9fa; padding: 10px; display: inline-block; border-radius: 5px; font-size: 24px; font-weight: bold; letter-spacing: 2px; color: #333; border: 1px solid #ddd;">
                                <span id="mygovid_amas_code">----</span>
                            </div>
                            <p style="margin-top: 5px; font-size: 12px; color: #666;">Verification Code</p>
                        </div>
                    </div>
                `
            }
        ],
        primary_action_label: __('Cancel'),
        primary_action: function() {
            window.mygovidEmasStop = true;
            status_dialog.hide();
            frm.reload_doc();
        }
    });

    status_dialog.show();
    window.mygovidEmasStop = false;

    // Start MyGovID login
    frappe.call({
        method: 'invoice_az.invoice_az.doctype.asan_login.asan_login.start_mygovid_login',
        args: {
            'asan_login_name': frm.doc.name
        },
        timeout: 130000,
        callback: function(r) {
            if (window.mygovidEmasStop) return;

            if (r.message && r.message.success) {
                // MyGovID login successful, now connect to ƏMAS
                $('#mygovid_amas_status_message').html(`
                    <h4 style="color: blue;">Connecting to ƏMAS...</h4>
                    <p>MyGovID authentication successful. Now connecting to ƏMAS...</p>
                `);
                $('#mygovid_amas_code_container').hide();

                // Now connect to ƏMAS
                frappe.call({
                    method: 'invoice_az.amas_api.connect_amas',
                    args: {
                        'asan_login_name': frm.doc.name
                    },
                    callback: function(r2) {
                        if (r2.message && r2.message.success) {
                            $('#mygovid_amas_status_message').html(`
                                <h4 style="color: green;">ƏMAS Connected!</h4>
                                <p>Successfully connected to ƏMAS.</p>
                            `);
                            $('.mygovid-amas-spinner').html(`
                                <div style="width: 64px; height: 64px; display: flex; align-items: center; justify-content: center;">
                                    <i class="fa fa-check" style="font-size: 48px; color: #5cb85c;"></i>
                                </div>
                            `);

                            status_dialog.set_primary_action(__('Continue'), function() {
                                status_dialog.hide();
                                const accounts = r2.message.accounts || [];
                                frm.reload_doc().then(function() {
                                    if (accounts.length > 0) {
                                        show_accounts_dialog_with_data(frm, accounts);
                                    }
                                });
                            });

                            // Auto close after 2 seconds
                            setTimeout(function() {
                                status_dialog.hide();
                                const accounts = r2.message.accounts || [];
                                frm.reload_doc().then(function() {
                                    if (accounts.length > 0) {
                                        show_accounts_dialog_with_data(frm, accounts);
                                    }
                                });
                            }, 2000);
                        } else {
                            $('#mygovid_amas_status_message').html(`
                                <h4 style="color: red;">ƏMAS Connection Failed</h4>
                                <p>${r2.message ? r2.message.message : 'Unknown error'}</p>
                            `);
                            $('.mygovid-amas-spinner').css('display', 'none');

                            status_dialog.set_primary_action(__('Close'), function() {
                                status_dialog.hide();
                                frm.reload_doc();
                            });
                        }
                    }
                });
            } else {
                // MyGovID login failed
                $('#mygovid_amas_status_message').html(`
                    <h4 style="color: red;">Authentication Failed</h4>
                    <p>${r.message ? r.message.message : 'Unknown error'}</p>
                `);
                $('.mygovid-amas-spinner').css('display', 'none');
                $('#mygovid_amas_code_container').hide();

                status_dialog.set_primary_action(__('Close'), function() {
                    status_dialog.hide();
                    frm.reload_doc();
                });
            }
        },
        error: function() {
            if (window.mygovidEmasStop) return;

            $('#mygovid_amas_status_message').html(`
                <h4 style="color: red;">Authentication Timeout</h4>
                <p>The request timed out. Please try again.</p>
            `);
            $('.mygovid-amas-spinner').css('display', 'none');
            $('#mygovid_amas_code_container').hide();

            status_dialog.set_primary_action(__('Close'), function() {
                status_dialog.hide();
                frm.reload_doc();
            });
        }
    });

    // Get verification code
    setTimeout(function() {
        frappe.call({
            method: 'invoice_az.invoice_az.doctype.asan_login.asan_login.get_mygovid_verification_code',
            args: { 'asan_login_name': frm.doc.name },
            callback: function(r) {
                if (r.message && r.message.success) {
                    $('#mygovid_amas_code').text(r.message.code);
                    $('#mygovid_amas_code_container').show();
                }
            }
        });
    }, 500);
}

function show_accounts_dialog_with_data(frm, accounts) {
    if (!accounts || accounts.length === 0) {
        frappe.msgprint(__('No organizations found in ƏMAS'));
        return;
    }

    // Always show dialog - user must explicitly select account
    // (don't auto-select even if only one account, as it might be employee not company)

    // Build accounts table
    let table_html = '<div style="max-height: 400px; overflow-y: auto;">';
    table_html += '<table class="table table-bordered table-hover">';
    table_html += '<thead><tr><th>Organization Name</th><th>VOEN</th><th>Role</th><th>Action</th></tr></thead>';
    table_html += '<tbody>';

    accounts.forEach(function(account, index) {
        const name = account.accountName || account.name || 'Unknown';
        const voen = account.accountNumber || account.voen || account.number || '';
        const role = account.roleName || account.role || '';
        const oid = account.accountOid || account.oid || '';

        table_html += `<tr>
            <td>${frappe.utils.escape_html(name)}</td>
            <td>${frappe.utils.escape_html(voen)}</td>
            <td>${frappe.utils.escape_html(role)}</td>
            <td>
                <button class="btn btn-xs btn-primary select-amas-account"
                        data-oid="${frappe.utils.escape_html(oid)}"
                        data-name="${frappe.utils.escape_html(name)}"
                        data-number="${frappe.utils.escape_html(voen)}"
                        data-role="${frappe.utils.escape_html(role)}">
                    Select
                </button>
            </td>
        </tr>`;
    });

    table_html += '</tbody></table></div>';

    const d = new frappe.ui.Dialog({
        title: __('Select ƏMAS Organization'),
        fields: [{
            fieldname: 'accounts_html',
            fieldtype: 'HTML',
            options: table_html
        }],
        primary_action_label: __('Close'),
        primary_action: function() {
            d.hide();
        }
    });

    d.show();

    // Add click handler for account selection
    d.$wrapper.find('.select-amas-account').on('click', function() {
        const oid = $(this).data('oid');
        const name = $(this).data('name');
        const number = $(this).data('number');
        const role = $(this).data('role');

        select_amas_account(frm, d, oid, name, number, role);
    });
}

function show_accounts_dialog(frm) {
    frappe.call({
        method: 'invoice_az.amas_api.get_amas_accounts',
        args: {
            'asan_login_name': frm.doc.name
        },
        callback: function(r) {
            if (r.message && r.message.success) {
                const accounts = r.message.accounts || [];

                if (accounts.length === 0) {
                    frappe.msgprint(__('No organizations found in ƏMAS'));
                    return;
                }

                // Build accounts table
                let table_html = '<div style="max-height: 400px; overflow-y: auto;">';
                table_html += '<table class="table table-bordered table-hover">';
                table_html += '<thead><tr><th>Organization Name</th><th>VOEN</th><th>Role</th><th>Action</th></tr></thead>';
                table_html += '<tbody>';

                accounts.forEach(function(account, index) {
                    const name = account.accountName || account.name || 'Unknown';
                    const voen = account.accountNumber || account.voen || account.number || '';
                    const role = account.roleName || account.role || '';
                    const oid = account.accountOid || account.oid || '';

                    table_html += `<tr>
                        <td>${frappe.utils.escape_html(name)}</td>
                        <td>${frappe.utils.escape_html(voen)}</td>
                        <td>${frappe.utils.escape_html(role)}</td>
                        <td>
                            <button class="btn btn-xs btn-primary select-amas-account"
                                    data-oid="${frappe.utils.escape_html(oid)}"
                                    data-name="${frappe.utils.escape_html(name)}"
                                    data-number="${frappe.utils.escape_html(voen)}"
                                    data-role="${frappe.utils.escape_html(role)}">
                                Select
                            </button>
                        </td>
                    </tr>`;
                });

                table_html += '</tbody></table></div>';

                const d = new frappe.ui.Dialog({
                    title: __('Select ƏMAS Organization'),
                    fields: [{
                        fieldname: 'accounts_html',
                        fieldtype: 'HTML',
                        options: table_html
                    }],
                    primary_action_label: __('Close'),
                    primary_action: function() {
                        d.hide();
                    }
                });

                d.show();

                // Add click handler for account selection
                d.$wrapper.find('.select-amas-account').on('click', function() {
                    const oid = $(this).data('oid');
                    const name = $(this).data('name');
                    const number = $(this).data('number');
                    const role = $(this).data('role');

                    select_amas_account(frm, d, oid, name, number, role);
                });

            } else {
                frappe.msgprint({
                    title: __('Error'),
                    indicator: 'red',
                    message: r.message ? r.message.message : __('Failed to get ƏMAS accounts')
                });
            }
        }
    });
}

function select_amas_account(frm, dialog, oid, name, number, role) {
    frappe.call({
        method: 'invoice_az.amas_api.change_amas_account',
        args: {
            'asan_login_name': frm.doc.name,
            'account_oid': oid,
            'account_name': name,
            'account_number': number,
            'role_name': role || 'chairman'
        },
        freeze: true,
        freeze_message: __('Selecting organization...'),
        callback: function(r) {
            if (r.message && r.message.success) {
                if (dialog) {
                    dialog.hide();
                }
                frappe.show_alert({
                    message: __('Organization selected: ') + name,
                    indicator: 'green'
                }, 5);
                frm.reload_doc();
            } else {
                frappe.msgprint({
                    title: __('Error'),
                    indicator: 'red',
                    message: r.message ? r.message.message : __('Failed to select organization')
                });
            }
        }
    });
}

function show_employees_dialog(frm) {
    const d = new frappe.ui.Dialog({
        title: __('ƏMAS Employees'),
        size: 'extra-large',
        fields: [
            {
                fieldname: 'loading_html',
                fieldtype: 'HTML',
                options: `
                    <div class="text-center" id="amas_loading">
                        <i class="fa fa-spinner fa-spin fa-3x"></i>
                        <p class="mt-3">Loading employees...</p>
                    </div>
                    <div id="amas_employees_container" style="display: none;">
                        <div class="mb-3">
                            <strong>Organization:</strong> ${frm.doc.amas_account_name || ''}
                            (VOEN: ${frm.doc.amas_account_number || ''})
                        </div>
                        <div id="amas_employees_table"></div>
                        <div id="amas_pagination" class="mt-3"></div>
                    </div>
                `
            }
        ],
        primary_action_label: __('Close'),
        primary_action: function() {
            d.hide();
        }
    });

    d.show();

    // Load employees
    load_employees(frm, d, 0, 100);
}

function load_employees(frm, dialog, offset, limit) {
    frappe.call({
        method: 'invoice_az.amas_api.get_employees_report',
        args: {
            'asan_login_name': frm.doc.name,
            'offset': offset,
            'limit': limit
        },
        callback: function(r) {
            dialog.$wrapper.find('#amas_loading').hide();
            dialog.$wrapper.find('#amas_employees_container').show();

            if (r.message && r.message.success) {
                const employees = r.message.employees || [];
                render_employees_table(dialog, employees, offset, limit, r.message.has_more);
            } else {
                dialog.$wrapper.find('#amas_employees_table').html(`
                    <div class="alert alert-danger">
                        ${r.message ? r.message.message : __('Failed to load employees')}
                    </div>
                `);
            }
        }
    });
}

function render_employees_table(dialog, employees, offset, limit, has_more) {
    if (employees.length === 0) {
        dialog.$wrapper.find('#amas_employees_table').html(`
            <div class="alert alert-info">
                ${__('No employees found')}
            </div>
        `);
        return;
    }

    // Build table
    let table_html = '<div style="max-height: 500px; overflow-y: auto;">';
    table_html += '<table class="table table-bordered table-striped table-hover" style="font-size: 12px;">';
    table_html += '<thead><tr>';

    // Get column names from first employee
    const columns = Object.keys(employees[0]);

    // Map column names to readable labels
    const column_labels = {
        'adi': 'Name',
        'soyadi': 'Surname',
        'ataAdi': 'Father Name',
        'fin': 'FIN',
        'vezife': 'Position',
        'muqavileNo': 'Contract No',
        'muqavileTarixi': 'Contract Date',
        'status': 'Status',
        'emekHaqqi': 'Salary',
        'isBaslamaTarixi': 'Start Date',
        'isBitmeTarixi': 'End Date'
    };

    columns.forEach(function(col) {
        const label = column_labels[col] || col;
        table_html += `<th>${frappe.utils.escape_html(label)}</th>`;
    });

    table_html += '</tr></thead><tbody>';

    employees.forEach(function(emp) {
        table_html += '<tr>';
        columns.forEach(function(col) {
            const value = emp[col] || '';
            table_html += `<td>${frappe.utils.escape_html(String(value))}</td>`;
        });
        table_html += '</tr>';
    });

    table_html += '</tbody></table></div>';

    dialog.$wrapper.find('#amas_employees_table').html(table_html);

    // Pagination info
    const showing_from = offset + 1;
    const showing_to = offset + employees.length;
    let pagination_html = `<p>Showing ${showing_from} - ${showing_to} employees`;

    if (has_more) {
        pagination_html += ` <button class="btn btn-sm btn-default load-more-employees">Load More</button>`;
    }

    pagination_html += '</p>';
    dialog.$wrapper.find('#amas_pagination').html(pagination_html);
}

function show_contract_stats(frm) {
    frappe.call({
        method: 'invoice_az.amas_api.get_contract_stats',
        args: {
            'asan_login_name': frm.doc.name
        },
        callback: function(r) {
            if (r.message && r.message.success) {
                const stats = r.message.stats || {};

                const d = new frappe.ui.Dialog({
                    title: __('ƏMAS Contract Statistics'),
                    fields: [{
                        fieldname: 'stats_html',
                        fieldtype: 'HTML',
                        options: `
                            <div style="padding: 20px;">
                                <h4>${frm.doc.amas_account_name || 'Organization'}</h4>
                                <p class="text-muted">VOEN: ${frm.doc.amas_account_number || ''}</p>
                                <hr>
                                <div class="row">
                                    <div class="col-md-4 text-center">
                                        <h2 class="text-success">${stats.aktiv || 0}</h2>
                                        <p>Active Contracts</p>
                                    </div>
                                    <div class="col-md-4 text-center">
                                        <h2 class="text-warning">${stats.icrada || 0}</h2>
                                        <p>In Process</p>
                                    </div>
                                    <div class="col-md-4 text-center">
                                        <h2 class="text-info">${stats.emrler || 0}</h2>
                                        <p>Orders</p>
                                    </div>
                                </div>
                                <div class="row mt-3">
                                    <div class="col-md-6 text-center">
                                        <h2 class="text-danger">${stats.etibarsiz || 0}</h2>
                                        <p>Invalid</p>
                                    </div>
                                    <div class="col-md-6 text-center">
                                        <h2 class="text-muted">${stats.quvvedendusmus || 0}</h2>
                                        <p>Terminated</p>
                                    </div>
                                </div>
                            </div>
                        `
                    }],
                    primary_action_label: __('Close'),
                    primary_action: function() {
                        d.hide();
                    }
                });

                d.show();
            } else {
                frappe.msgprint({
                    title: __('Error'),
                    indicator: 'red',
                    message: r.message ? r.message.message : __('Failed to get contract statistics')
                });
            }
        }
    });
}

function refresh_amas_session(frm) {
    frappe.call({
        method: 'invoice_az.amas_api.refresh_amas_session',
        args: {
            'asan_login_name': frm.doc.name
        },
        freeze: true,
        freeze_message: __('Refreshing ƏMAS session...'),
        callback: function(r) {
            if (r.message && r.message.success) {
                frappe.show_alert({
                    message: __('ƏMAS session refreshed successfully'),
                    indicator: 'green'
                }, 3);
                frm.reload_doc();
            } else {
                frappe.msgprint({
                    title: __('Error'),
                    indicator: 'red',
                    message: r.message ? r.message.message : __('Failed to refresh ƏMAS session')
                });
            }
        }
    });
}

function disconnect_amas(frm) {
    frappe.confirm(
        __('Are you sure you want to disconnect from ƏMAS?'),
        function() {
            frappe.call({
                method: 'invoice_az.amas_api.disconnect_amas',
                args: {
                    'asan_login_name': frm.doc.name
                },
                callback: function(r) {
                    if (r.message && r.message.success) {
                        frappe.show_alert({
                            message: __('Disconnected from ƏMAS'),
                            indicator: 'blue'
                        }, 3);
                        frm.reload_doc();
                    } else {
                        frappe.msgprint({
                            title: __('Error'),
                            indicator: 'red',
                            message: r.message ? r.message.message : __('Failed to disconnect from ƏMAS')
                        });
                    }
                }
            });
        }
    );
}
