/**
 * 回访记录功能JavaScript
 * 处理字符计数、保存等功能
 */

// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', function() {
    initializeCallbackRecord();
});

/**
 * 初始化回访记录功能
 */
function initializeCallbackRecord() {
    // 初始化字符计数
    initCharacterCount();
    
    // 初始化表单验证
    initFormValidation();
    
    console.log('回访记录功能初始化完成');
}

/**
 * 初始化字符计数功能
 */
function initCharacterCount() {
    const textareas = document.querySelectorAll('textarea[name="callback-record"]');
    
    textareas.forEach(textarea => {
        const caseNumber = textarea.id.replace('callback-record-', '');
        const countElement = document.getElementById(`char-count-${caseNumber}`);
        
        if (countElement) {
            // 初始化计数
            updateCharacterCount(textarea.id);
            
            // 监听输入事件
            textarea.addEventListener('input', function() {
                updateCharacterCount(this.id);
            });
            
            // 监听粘贴事件
            textarea.addEventListener('paste', function() {
                setTimeout(() => {
                    updateCharacterCount(this.id);
                }, 0);
            });
        }
    });
}

/**
 * 更新字符计数
 * @param {string} textareaId - 文本域ID
 */
function updateCharacterCount(textareaId) {
    const textarea = document.getElementById(textareaId);
    const caseNumber = textareaId.replace('callback-record-', '');
    const countElement = document.getElementById(`char-count-${caseNumber}`);
    
    if (textarea && countElement) {
        const currentLength = textarea.value.length;
        const maxLength = textarea.getAttribute('maxlength') || 500;
        
        countElement.textContent = currentLength;
        
        // 根据字符数改变颜色
        if (currentLength > maxLength * 0.9) {
            countElement.className = 'text-red-500 font-medium';
        } else if (currentLength > maxLength * 0.7) {
            countElement.className = 'text-yellow-600';
        } else {
            countElement.className = 'text-gray-500';
        }
    }
}

/**
 * 初始化表单验证
 */
function initFormValidation() {
    const textareas = document.querySelectorAll('textarea[name="callback-record"]');
    
    textareas.forEach(textarea => {
        textarea.addEventListener('blur', function() {
            validateCallbackRecord(this);
        });
    });
}

/**
 * 验证回访记录
 * @param {HTMLElement} textarea - 文本域元素
 */
function validateCallbackRecord(textarea) {
    const value = textarea.value.trim();
    const minLength = 5; // 最少5个字符
    
    // 移除之前的错误样式
    textarea.classList.remove('border-red-500', 'border-green-500');
    
    if (value.length > 0 && value.length < minLength) {
        textarea.classList.add('border-red-500');
        showToast('回访记录至少需要5个字符', 'warning');
    } else if (value.length >= minLength) {
        textarea.classList.add('border-green-500');
    }
}

/**
 * 保存回访记录
 * @param {string} caseNumber - 病历号
 */
function saveCallbackRecord(caseNumber) {
    const textarea = document.getElementById(`callback-record-${caseNumber}`);
    const methodCheckboxes = document.querySelectorAll(`input[name="callback-method-${caseNumber}"]:checked`);
    
    if (!textarea) {
        showToast('找不到回访记录输入框', 'error');
        return;
    }
    
    const record = textarea.value.trim();
    if (!record) {
        showToast('请输入回访记录内容', 'warning');
        textarea.focus();
        return;
    }
    
    if (record.length < 5) {
        showToast('回访记录至少需要5个字符', 'warning');
        textarea.focus();
        return;
    }
    
    // 获取选中的回访方式
    const methods = Array.from(methodCheckboxes).map(cb => cb.value);
    if (methods.length === 0) {
        showToast('请选择至少一种回访方式', 'warning');
        return;
    }
    
    // 构建保存数据
    const saveData = {
        caseNumber: caseNumber,
        callbackMethods: methods,
        callbackRecord: record,
        operator: '系统用户', // 可以根据实际情况修改
        timestamp: new Date().toISOString()
    };
    
    // 显示保存中状态
    const saveBtn = document.querySelector(`button[onclick="saveCallbackRecord('${caseNumber}')"]`);
    const originalText = saveBtn.innerHTML;
    saveBtn.innerHTML = '<i class="fas fa-spinner fa-spin mr-1"></i>保存中...';
    saveBtn.disabled = true;
    
    // 调用保存API
    saveCallbackRecordToDatabase(saveData)
        .then(result => {
            showToast('回访记录保存成功', 'success');
            console.log('保存成功:', result);
            
            // 可以在这里添加保存成功后的处理逻辑
            // 比如清空表单、显示保存时间等
            
        })
        .catch(error => {
            console.error('保存失败:', error);
            showToast(`保存失败: ${error.message}`, 'error');
        })
        .finally(() => {
            // 恢复按钮状态
            saveBtn.innerHTML = originalText;
            saveBtn.disabled = false;
        });
}

/**
 * 保存回访记录到MySQL数据库
 * @param {Object} data - 保存数据
 * @returns {Promise} - 保存结果
 */
async function saveCallbackRecordToDatabase(data) {
    console.log('准备保存到MySQL数据库的数据:', data);
    
    try {
        const response = await fetch('/api/callback-records', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Accept': 'application/json'
            },
            body: JSON.stringify(data)
        });
        
        if (!response.ok) {
            const errorText = await response.text();
            throw new Error(`HTTP ${response.status}: ${errorText}`);
        }
        
        const result = await response.json();
        
        if (result.success) {
            return result;
        } else {
            throw new Error(result.message || '保存失败');
        }
        
    } catch (error) {
        console.error('保存回访记录到MySQL失败:', error);
        
        // 如果是网络错误或API不可用，显示友好提示
        if (error.name === 'TypeError' || error.message.includes('fetch')) {
            throw new Error('无法连接到服务器，请检查网络连接或联系管理员');
        }
        
        throw error;
    }
}

/**
 * 设置下次回访（预留功能）
 * @param {string} caseNumber - 病历号
 */
function scheduleNextCallback(caseNumber) {
    showToast('此功能正在开发中...', 'info');
    console.log('设置下次回访:', caseNumber);
}

/**
 * 新建预约（预留功能）
 * @param {string} caseNumber - 病历号
 */
function createAppointment(caseNumber) {
    showToast('此功能正在开发中...', 'info');
    console.log('新建预约:', caseNumber);
}

/**
 * 显示提示消息
 * @param {string} message - 消息内容
 * @param {string} type - 消息类型 (success, error, warning, info)
 */
function showToast(message, type = 'info') {
    // 创建提示元素
    const toast = document.createElement('div');
    toast.className = `fixed top-4 right-4 px-6 py-3 rounded-lg shadow-lg z-50 transition-all duration-300 transform translate-x-full`;
    
    // 根据类型设置样式
    switch (type) {
        case 'success':
            toast.classList.add('bg-green-500', 'text-white');
            break;
        case 'error':
            toast.classList.add('bg-red-500', 'text-white');
            break;
        case 'warning':
            toast.classList.add('bg-yellow-500', 'text-white');
            break;
        default:
            toast.classList.add('bg-blue-500', 'text-white');
    }
    
    toast.textContent = message;
    document.body.appendChild(toast);
    
    // 显示动画
    setTimeout(() => {
        toast.classList.remove('translate-x-full');
    }, 100);
    
    // 自动隐藏
    setTimeout(() => {
        toast.classList.add('translate-x-full');
        setTimeout(() => {
            if (toast.parentNode) {
                toast.parentNode.removeChild(toast);
            }
        }, 300);
    }, 3000);
}

/**
 * 获取认证令牌（如果需要的话）
 * @returns {string} - 认证令牌
 */
function getAuthToken() {
    // 这里可以实现获取认证令牌的逻辑
    // 比如从localStorage、sessionStorage或cookie中获取
    return '';
} 