<?php
require_once 'config.php';

// Обработка AJAX-запроса на предпрослушивание голоса
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'preview') {
    $voice = $_POST['voice'] ?? '';
    $ttsData = [
        "text" => "Привет! Это проверка моего голоса. Как я звучу?", 
        "voice_id" => $voice
    ];
    
    $chTts = curl_init('https://gptunnel.ru/v1/tts/create');
    curl_setopt($chTts, CURLOPT_HTTPHEADER, ['Authorization: ' . $apiKey, 'Content-Type: application/json']);
    curl_setopt($chTts, CURLOPT_POST, true);
    curl_setopt($chTts, CURLOPT_POSTFIELDS, json_encode($ttsData));
    curl_setopt($chTts, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($chTts, CURLOPT_SSL_VERIFYPEER, false);
    
    echo curl_exec($chTts); // Возвращаем JSON с base64 аудио
    exit;
}

// Сохранение настроек
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !isset($_POST['action'])) {
    $voice = $_POST['voice'] ?? '';
    $speed = $_POST['speed'] ?? '1.0';
    
    $db->prepare("UPDATE settings SET value = ? WHERE key = 'tts_voice'")->execute([$voice]);
    $db->prepare("UPDATE settings SET value = ? WHERE key = 'tts_speed'")->execute([$speed]);
    
    header("Location: m.php");
    exit;
}

// Получаем список голосов из API
$ch = curl_init('https://gptunnel.ru/v1/tts/voices');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: ' . $apiKey]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);

$voicesData = json_decode($response, true) ?? [];

// Текущие настройки
$currentVoice = getSetting('tts_voice');
$currentSpeed = getSetting('tts_speed');
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>Настройки голоса</title>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet">
    <style>
        :root { --bg: #0f172a; --panel: #1e293b; --accent: #10b981; --text: #f8fafc; }
        body { background: var(--bg); color: var(--text); font-family: 'Inter', sans-serif; padding: 20px; }
        .header { display: flex; align-items: center; gap: 15px; margin-bottom: 30px; }
        .back-btn { color: var(--accent); text-decoration: none; font-size: 24px; }
        h1 { font-size: 22px; margin: 0; }
        
        .card { background: var(--panel); padding: 20px; border-radius: 16px; border: 1px solid #334155; margin-bottom: 20px; }
        label { display: block; margin-bottom: 10px; font-weight: 600; color: #94a3b8; }
        
        .voice-row { display: flex; gap: 10px; margin-bottom: 20px; }
        select { flex: 1; background: var(--bg); color: white; border: 1px solid #475569; padding: 15px; border-radius: 10px; font-size: 16px; outline: none; min-width: 0; }
        .preview-btn { background: var(--panel); color: var(--accent); border: 1px solid var(--accent); border-radius: 10px; padding: 0 15px; font-weight: bold; cursor: pointer; transition: 0.2s; white-space: nowrap; }
        .preview-btn:active { background: rgba(16, 185, 129, 0.1); }
        
        .slider-container { display: flex; align-items: center; gap: 15px; }
        input[type=range] { flex: 1; accent-color: var(--accent); }
        .speed-val { font-weight: bold; color: var(--accent); width: 40px; text-align: right; }
        
        .save-btn { width: 100%; background: var(--accent); color: white; border: none; padding: 15px; border-radius: 10px; font-size: 16px; font-weight: bold; cursor: pointer; margin-top: 20px; }
    </style>
</head>
<body>

<div class="header">
    <a href="m.php" class="back-btn">←</a>
    <h1>Настройки голоса</h1>
</div>

<form method="POST">
    <div class="card">
        <label>Персонаж (Голос)</label>
        <div class="voice-row">
            <select name="voice" id="voiceSelect">
                <?php foreach($voicesData as $v): ?>
                    <option value="<?= htmlspecialchars($v['id']) ?>" <?= ($v['id'] == $currentVoice) ? 'selected' : '' ?>>
                        <?= htmlspecialchars($v['name']) ?>
                    </option>
                <?php endforeach; ?>
            </select>
            <button type="button" class="preview-btn" id="previewBtn" onclick="previewVoice()">▶ Послушать</button>
        </div>

        <label>Скорость речи</label>
        <div class="slider-container">
            <span style="font-size: 12px;">Медленно</span>
            <input type="range" name="speed" id="speedSlider" min="0.5" max="2.0" step="0.1" value="<?= htmlspecialchars($currentSpeed) ?>" oninput="document.getElementById('speedVal').innerText = this.value + 'x'">
            <span style="font-size: 12px;">Быстро</span>
        </div>
        <div style="text-align: center; margin-top: 10px;">
            Текущая: <span class="speed-val" id="speedVal"><?= htmlspecialchars($currentSpeed) ?>x</span>
        </div>
    </div>
    
    <button type="submit" class="save-btn">Сохранить настройки</button>
</form>

<script>
    let previewAudio = null;

    async function previewVoice() {
        const btn = document.getElementById('previewBtn');
        const voice = document.getElementById('voiceSelect').value;
        const speed = document.getElementById('speedSlider').value;
        
        if (previewAudio) {
            previewAudio.pause();
        }
        
        btn.innerText = '⏳...';
        btn.disabled = true;
        
        try {
            const formData = new URLSearchParams();
            formData.append('action', 'preview');
            formData.append('voice', voice);
            
            const response = await fetch('', {
                method: 'POST',
                body: formData
            });
            
            const data = await response.json();
            
            if (data.data) {
                previewAudio = new Audio("data:audio/mp3;base64," + data.data);
                previewAudio.playbackRate = parseFloat(speed) || 1.0;
                previewAudio.play();
            } else {
                alert('Не удалось загрузить голос.');
            }
        } catch (e) {
            alert('Ошибка сети при загрузке голоса.');
        }
        
        btn.innerText = '▶ Послушать';
        btn.disabled = false;
    }
</script>

</body>
</html>