// JavaScript для страницы автоматизации (FR-034)

let currentWebhookId = null;

// Загрузка данных при открытии страницы
document.addEventListener('DOMContentLoaded', function() {
    loadApiKeys();
    loadWebhooks();
    
    // Обновление при переключении вкладок
    const tabs = document.querySelectorAll('#automationTabs button[data-bs-toggle="tab"]');
    tabs.forEach(tab => {
        tab.addEventListener('shown.bs.tab', function(event) {
            if (event.target.id === 'api-keys-tab') {
                loadApiKeys();
            } else if (event.target.id === 'webhooks-tab') {
                loadWebhooks();
            }
        });
    });
});

// === API Ключи ===

async function loadApiKeys() {
    try {
        const response = await fetch('/api/v1/admin/api-keys');
        const data = await response.json();
        
        if (data.success) {
            renderApiKeys(data.keys);
        } else {
            showError('Ошибка при загрузке API ключей: ' + (data.error || 'Неизвестная ошибка'));
        }
    } catch (error) {
        showError('Ошибка при загрузке API ключей: ' + error.message);
    }
}

function renderApiKeys(keys) {
    const tbody = document.getElementById('apiKeysTableBody');
    
    if (keys.length === 0) {
        tbody.innerHTML = '<tr><td colspan="8" class="text-center">API ключи не найдены</td></tr>';
        return;
    }
    
    tbody.innerHTML = keys.map(key => `
        <tr>
            <td>${escapeHtml(key.name)}</td>
            <td><code>${escapeHtml(key.prefix)}...</code></td>
            <td>${escapeHtml(key.description || '-')}</td>
            <td>${key.permissions && key.permissions.length > 0 ? key.permissions.join(', ') : 'Все'}</td>
            <td>
                <span class="badge ${key.enabled ? 'bg-success' : 'bg-secondary'}">
                    ${key.enabled ? 'Активен' : 'Отключен'}
                </span>
            </td>
            <td>${key.last_used ? new Date(key.last_used).toLocaleString('ru-RU') : 'Никогда'}</td>
            <td>${key.expires_at ? new Date(key.expires_at).toLocaleString('ru-RU') : 'Никогда'}</td>
            <td>
                <button class="btn btn-sm btn-outline-primary" onclick="toggleApiKey(${key.id}, ${!key.enabled})" title="${key.enabled ? 'Отключить' : 'Включить'}">
                    <i class="bi bi-${key.enabled ? 'pause' : 'play'}-fill"></i>
                </button>
                <button class="btn btn-sm btn-outline-danger" onclick="deleteApiKey(${key.id})" title="Удалить">
                    <i class="bi bi-trash"></i>
                </button>
            </td>
        </tr>
    `).join('');
}

function showCreateApiKeyModal() {
    document.getElementById('createApiKeyForm').reset();
    new bootstrap.Modal(document.getElementById('createApiKeyModal')).show();
}

async function createApiKey() {
    const form = document.getElementById('createApiKeyForm');
    const formData = new FormData(form);
    
    const data = {
        name: formData.get('name'),
        description: formData.get('description') || null,
        permissions: JSON.parse(formData.get('permissions') || '[]'),
        expires_at: formData.get('expires_at') || null
    };
    
    try {
        const response = await fetch('/api/v1/admin/api-keys', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(data)
        });
        
        const result = await response.json();
        
        if (result.success) {
            bootstrap.Modal.getInstance(document.getElementById('createApiKeyModal')).hide();
            document.getElementById('apiKeyValue').value = result.key;
            new bootstrap.Modal(document.getElementById('showApiKeyModal')).show();
            loadApiKeys();
        } else {
            showError('Ошибка при создании API ключа: ' + (result.error || 'Неизвестная ошибка'));
        }
    } catch (error) {
        showError('Ошибка при создании API ключа: ' + error.message);
    }
}

function copyApiKey() {
    const input = document.getElementById('apiKeyValue');
    input.select();
    document.execCommand('copy');
    showSuccess('API ключ скопирован в буфер обмена');
}

async function toggleApiKey(keyId, enabled) {
    try {
        const response = await fetch(`/api/v1/admin/api-keys/${keyId}`, {
            method: 'PUT',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({ enabled })
        });
        
        const result = await response.json();
        
        if (result.success) {
            loadApiKeys();
        } else {
            showError('Ошибка при обновлении API ключа: ' + (result.error || 'Неизвестная ошибка'));
        }
    } catch (error) {
        showError('Ошибка при обновлении API ключа: ' + error.message);
    }
}

async function deleteApiKey(keyId) {
    if (!confirm('Вы уверены, что хотите удалить этот API ключ?')) {
        return;
    }
    
    try {
        const response = await fetch(`/api/v1/admin/api-keys/${keyId}`, {
            method: 'DELETE'
        });
        
        const result = await response.json();
        
        if (result.success) {
            showSuccess('API ключ удален');
            loadApiKeys();
        } else {
            showError('Ошибка при удалении API ключа: ' + (result.error || 'Неизвестная ошибка'));
        }
    } catch (error) {
        showError('Ошибка при удалении API ключа: ' + error.message);
    }
}

// === Webhooks ===

async function loadWebhooks() {
    try {
        const response = await fetch('/api/v1/admin/webhooks');
        const data = await response.json();
        
        if (data.success) {
            renderWebhooks(data.webhooks);
        } else {
            showError('Ошибка при загрузке webhooks: ' + (data.error || 'Неизвестная ошибка'));
        }
    } catch (error) {
        showError('Ошибка при загрузке webhooks: ' + error.message);
    }
}

function renderWebhooks(webhooks) {
    const tbody = document.getElementById('webhooksTableBody');
    
    if (webhooks.length === 0) {
        tbody.innerHTML = '<tr><td colspan="7" class="text-center">Webhooks не найдены</td></tr>';
        return;
    }
    
    tbody.innerHTML = webhooks.map(webhook => `
        <tr>
            <td>${escapeHtml(webhook.name)}</td>
            <td><code>${escapeHtml(webhook.url)}</code></td>
            <td>${webhook.event_types.join(', ')}</td>
            <td>${webhook.method}</td>
            <td>
                <span class="badge ${webhook.enabled ? 'bg-success' : 'bg-secondary'}">
                    ${webhook.enabled ? 'Активен' : 'Отключен'}
                </span>
            </td>
            <td>${webhook.updated_at ? new Date(webhook.updated_at).toLocaleString('ru-RU') : '-'}</td>
            <td>
                <button class="btn btn-sm btn-outline-info" onclick="showWebhookDeliveries(${webhook.id})" title="История доставки">
                    <i class="bi bi-clock-history"></i>
                </button>
                <button class="btn btn-sm btn-outline-primary" onclick="toggleWebhook(${webhook.id}, ${!webhook.enabled})" title="${webhook.enabled ? 'Отключить' : 'Включить'}">
                    <i class="bi bi-${webhook.enabled ? 'pause' : 'play'}-fill"></i>
                </button>
                <button class="btn btn-sm btn-outline-danger" onclick="deleteWebhook(${webhook.id})" title="Удалить">
                    <i class="bi bi-trash"></i>
                </button>
            </td>
        </tr>
    `).join('');
}

function showCreateWebhookModal() {
    document.getElementById('createWebhookForm').reset();
    new bootstrap.Modal(document.getElementById('createWebhookModal')).show();
}

async function createWebhook() {
    const form = document.getElementById('createWebhookForm');
    const formData = new FormData(form);
    
    let headers = {};
    try {
        headers = JSON.parse(formData.get('headers') || '{}');
    } catch (e) {
        showError('Неверный формат заголовков (должен быть JSON)');
        return;
    }
    
    const data = {
        name: formData.get('name'),
        url: formData.get('url'),
        event_types: JSON.parse(formData.get('event_types')),
        method: formData.get('method'),
        secret: formData.get('secret') || null,
        headers: headers,
        retry_count: parseInt(formData.get('retry_count')),
        timeout: parseInt(formData.get('timeout')),
        description: formData.get('description') || null,
        enabled: true
    };
    
    try {
        const response = await fetch('/api/v1/admin/webhooks', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(data)
        });
        
        const result = await response.json();
        
        if (result.success) {
            bootstrap.Modal.getInstance(document.getElementById('createWebhookModal')).hide();
            showSuccess('Webhook создан');
            loadWebhooks();
        } else {
            showError('Ошибка при создании webhook: ' + (result.error || 'Неизвестная ошибка'));
        }
    } catch (error) {
        showError('Ошибка при создании webhook: ' + error.message);
    }
}

async function toggleWebhook(webhookId, enabled) {
    try {
        const response = await fetch(`/api/v1/admin/webhooks/${webhookId}`, {
            method: 'PUT',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({ enabled })
        });
        
        const result = await response.json();
        
        if (result.success) {
            loadWebhooks();
        } else {
            showError('Ошибка при обновлении webhook: ' + (result.error || 'Неизвестная ошибка'));
        }
    } catch (error) {
        showError('Ошибка при обновлении webhook: ' + error.message);
    }
}

async function deleteWebhook(webhookId) {
    if (!confirm('Вы уверены, что хотите удалить этот webhook?')) {
        return;
    }
    
    try {
        const response = await fetch(`/api/v1/admin/webhooks/${webhookId}`, {
            method: 'DELETE'
        });
        
        const result = await response.json();
        
        if (result.success) {
            showSuccess('Webhook удален');
            loadWebhooks();
        } else {
            showError('Ошибка при удалении webhook: ' + (result.error || 'Неизвестная ошибка'));
        }
    } catch (error) {
        showError('Ошибка при удалении webhook: ' + error.message);
    }
}

async function showWebhookDeliveries(webhookId) {
    currentWebhookId = webhookId;
    const modal = new bootstrap.Modal(document.getElementById('webhookDeliveriesModal'));
    modal.show();
    
    try {
        const response = await fetch(`/api/v1/admin/webhooks/${webhookId}/deliveries?limit=50`);
        const data = await response.json();
        
        if (data.success) {
            renderWebhookDeliveries(data.deliveries);
        } else {
            document.getElementById('webhookDeliveriesBody').innerHTML = 
                '<tr><td colspan="6" class="text-center text-danger">Ошибка при загрузке истории</td></tr>';
        }
    } catch (error) {
        document.getElementById('webhookDeliveriesBody').innerHTML = 
            '<tr><td colspan="6" class="text-center text-danger">Ошибка: ' + error.message + '</td></tr>';
    }
}

function renderWebhookDeliveries(deliveries) {
    const tbody = document.getElementById('webhookDeliveriesBody');
    
    if (deliveries.length === 0) {
        tbody.innerHTML = '<tr><td colspan="6" class="text-center">История доставки пуста</td></tr>';
        return;
    }
    
    tbody.innerHTML = deliveries.map(delivery => `
        <tr>
            <td>${escapeHtml(delivery.event_type)}</td>
            <td>
                <span class="badge ${delivery.success ? 'bg-success' : 'bg-danger'}">
                    ${delivery.success ? 'Успешно' : 'Ошибка'}
                </span>
            </td>
            <td>${delivery.status_code || '-'}</td>
            <td>${delivery.attempt}</td>
            <td>${delivery.delivered_at ? new Date(delivery.delivered_at).toLocaleString('ru-RU') : '-'}</td>
            <td>${delivery.error_message ? escapeHtml(delivery.error_message.substring(0, 100)) : '-'}</td>
        </tr>
    `).join('');
}

// === Утилиты ===

function escapeHtml(text) {
    const div = document.createElement('div');
    div.textContent = text;
    return div.innerHTML;
}

function showSuccess(message) {
    // Используем Bootstrap toast или alert
    const alertDiv = document.createElement('div');
    alertDiv.className = 'alert alert-success alert-dismissible fade show position-fixed top-0 end-0 m-3';
    alertDiv.style.zIndex = '9999';
    alertDiv.innerHTML = `
        ${message}
        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
    `;
    document.body.appendChild(alertDiv);
    setTimeout(() => alertDiv.remove(), 3000);
}

function showError(message) {
    const alertDiv = document.createElement('div');
    alertDiv.className = 'alert alert-danger alert-dismissible fade show position-fixed top-0 end-0 m-3';
    alertDiv.style.zIndex = '9999';
    alertDiv.innerHTML = `
        ${message}
        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
    `;
    document.body.appendChild(alertDiv);
    setTimeout(() => alertDiv.remove(), 5000);
}
