<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Telefoonnummer Tool - Snel Valideren & WhatsApp Check</title>
<link rel="stylesheet" href="style.css">
<style>
.whatsapp-account-card {
    background: white;
    border-radius: 10px;
    padding: 15px;
    margin: 10px 0;
    border-left: 4px solid #25D366;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.account-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}

.account-name {
    font-weight: bold;
    font-size: 16px;
}

.account-status {
    padding: 4px 8px;
    border-radius: 12px;
    font-size: 12px;
    font-weight: bold;
}

.status-connected { background: #d4edda; color: #155724; }
.status-disconnected { background: #f8d7da; color: #721c24; }
.status-waiting { background: #fff3cd; color: #856404; }
.status-active { background: #007bff; color: white; }

.account-details {
    font-size: 14px;
    color: #666;
}

.group-badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 11px;
    font-weight: bold;
    margin-right: 5px;
    color: white;
}

.qr-section {
    text-align: center;
    padding: 20px;
    background: #f8f9fa;
    border-radius: 10px;
    margin: 15px 0;
    border: 2px dashed #25D366;
}

.qr-image {
    max-width: 200px;
    margin: 10px auto;
    display: block;
}

.accounts-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
    gap: 15px;
    margin: 20px 0;
}

.groups-container {
    margin: 20px 0;
}

.group-section {
    background: #f8f9fa;
    border-radius: 10px;
    padding: 15px;
    margin: 10px 0;
    border-left: 4px solid;
}

.group-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}

.group-name {
    font-weight: bold;
    font-size: 18px;
}

.group-stats {
    font-size: 14px;
    color: #666;
}

.account-management {
    background: white;
    border-radius: 10px;
    padding: 20px;
    margin: 20px 0;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}

.form-row {
    display: flex;
    gap: 10px;
    margin-bottom: 15px;
    flex-wrap: wrap;
}

.form-group {
    flex: 1;
    min-width: 200px;
}

.form-group label {
    display: block;
    margin-bottom: 5px;
    font-weight: bold;
    color: #333;
}

.form-group input, .form-group select {
    width: 100%;
    padding: 8px 12px;
    border: 1px solid #ddd;
    border-radius: 5px;
    font-size: 14px;
}

.btn {
    padding: 10px 20px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    font-size: 14px;
    font-weight: bold;
    transition: all 0.3s;
}

.btn-primary { background: #007bff; color: white; }
.btn-success { background: #28a745; color: white; }
.btn-danger { background: #dc3545; color: white; }
.btn-warning { background: #ffc107; color: black; }
.btn-info { background: #17a2b8; color: white; }

.btn:hover {
    opacity: 0.9;
    transform: translateY(-1px);
}

.btn-sm {
    padding: 5px 10px;
    font-size: 12px;
    margin: 2px;
}

.client-selection {
    background: #e9ecef;
    padding: 15px;
    border-radius: 8px;
    margin: 15px 0;
}

.client-options {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 10px;
}

.client-option {
    background: white;
    padding: 8px 15px;
    border-radius: 20px;
    border: 2px solid #ddd;
    cursor: pointer;
    font-size: 14px;
}

.client-option.selected {
    border-color: #25D366;
    background: #25D366;
    color: white;
}

.client-option.ready {
    border-color: #28a745;
}

.client-option:not(.ready) {
    opacity: 0.6;
    cursor: not-allowed;
}

.progress {
    width: 100%;
    height: 20px;
    background: #f0f0f0;
    border-radius: 10px;
    margin: 10px 0;
    overflow: hidden;
}

.progress-bar {
    height: 100%;
    background: linear-gradient(90deg, #007bff, #0056b3);
    border-radius: 10px;
    transition: width 0.3s ease;
    width: 0%;
}

.stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 10px;
    margin: 15px 0;
}

.stat-card {
    background: #f8f9fa;
    padding: 15px;
    border-radius: 8px;
    text-align: center;
    border-left: 4px solid #007bff;
}

.stat-number {
    font-size: 24px;
    font-weight: bold;
    color: #333;
}

.stat-label {
    font-size: 12px;
    color: #666;
    margin-top: 5px;
}

.table-container {
    overflow-x: auto;
    margin: 15px 0;
    border: 1px solid #ddd;
    border-radius: 8px;
}

table {
    width: 100%;
    border-collapse: collapse;
}

th, td {
    padding: 10px;
    text-align: left;
    border-bottom: 1px solid #ddd;
}

th {
    background: #f8f9fa;
    font-weight: bold;
}

.action-buttons {
    display: flex;
    gap: 10px;
    margin: 15px 0;
    flex-wrap: wrap;
}

.groups-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 15px;
    margin: 15px 0;
}

.group-card {
    background: white;
    border-radius: 8px;
    padding: 15px;
    border-left: 4px solid;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.group-actions {
    display: flex;
    gap: 5px;
}

.rotation-panel {
    background: #e7f3ff;
    padding: 15px;
    border-radius: 8px;
    margin: 15px 0;
    border-left: 4px solid #007bff;
}

.rotation-status {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 10px 0;
}

.rotation-active { color: #28a745; font-weight: bold; }
.rotation-inactive { color: #dc3545; font-weight: bold; }

.pause-panel {
    background: #fff3cd;
    padding: 15px;
    border-radius: 8px;
    margin: 15px 0;
    border-left: 4px solid #ffc107;
}

.paused-check {
    background: white;
    padding: 12px;
    border-radius: 6px;
    margin: 8px 0;
    border-left: 4px solid #ffc107;
}

.profile-details {
    background: #f8f9fa;
    padding: 10px;
    border-radius: 6px;
    margin: 8px 0;
    font-size: 13px;
}

.profile-image {
    width: 50px;
    height: 50px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid #ddd;
}

.ai-analysis-card {
    background: white;
    border-radius: 10px;
    padding: 15px;
    margin: 10px 0;
    border-left: 4px solid #ff6b6b;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.ai-result-card {
    background: #f8f9fa;
    border-radius: 8px;
    padding: 12px;
    margin: 8px 0;
    border-left: 4px solid #4ecdc4;
}

.ai-stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
    gap: 10px;
    margin: 15px 0;
}

.filter-panel {
    background: #e7f3ff;
    padding: 15px;
    border-radius: 8px;
    margin: 15px 0;
    border-left: 4px solid #007bff;
}

.filter-controls {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 15px;
    margin: 15px 0;
}

.age-slider {
    width: 100%;
    margin: 10px 0;
}

.gender-options {
    display: flex;
    gap: 10px;
    margin: 10px 0;
}

.gender-option {
    padding: 8px 15px;
    border: 2px solid #ddd;
    border-radius: 20px;
    cursor: pointer;
    background: white;
}

.gender-option.selected {
    border-color: #007bff;
    background: #007bff;
    color: white;
}

.confidence-meter {
    height: 8px;
    background: #e9ecef;
    border-radius: 4px;
    margin: 5px 0;
    overflow: hidden;
}

.confidence-fill {
    height: 100%;
    background: linear-gradient(90deg, #ff6b6b, #4ecdc4);
    border-radius: 4px;
}

.analysis-progress {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 10px 0;
}

.progress-indicator {
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: #ffd93d;
    animation: pulse 1.5s infinite;
}

@keyframes pulse {
    0% { opacity: 1; }
    50% { opacity: 0.5; }
    100% { opacity: 1; }
}

.analysis-complete {
    background: #4ecdc4;
    animation: none;
}

.realtime-updates {
    background: #fff3cd;
    padding: 10px;
    border-radius: 5px;
    margin: 10px 0;
    border-left: 4px solid #ffc107;
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>📱 Telefoonnummer Tool</h1>
<p>Snel valideren & WhatsApp verificatie met AI analyse</p>
<a href="whatsapp-web.html" class="admin-link">📱 WhatsApp Koppelen</a>
</header>

<nav class="tabs">
<button class="tab-button active" data-tab="generator">Nummer Generator</button>
<button class="tab-button" data-tab="whatsapp">WhatsApp Check</button>
<button class="tab-button" data-tab="ai-analysis">🤖 AI Analyse</button>
<button class="tab-button" data-tab="accounts">WhatsApp Accounts</button>
<button class="tab-button" data-tab="config">Configuratie</button>
</nav>

<!-- Generator Tab -->
<div id="generator" class="tab-content active">
<div class="card">
<h2>⚡ Snel Nummers Genereren & Valideren</h2>
<div class="form-row">
<div class="form-group">
<label>Aantal nummers:</label>
<input type="number" id="count" value="50" min="1" max="1000">
</div>
<div class="form-group">
<label>Land:</label>
<select id="country">
<option value="NL">🇳🇱 Nederland (+31)</option>
<option value="BE">🇧🇪 België (+32)</option>
<option value="DE">🇩🇪 Duitsland (+49)</option>
<option value="FR">🇫🇷 Frankrijk (+33)</option>
<option value="UK">🇬🇧 Verenigd Koninkrijk (+44)</option>
<option value="US">🇺🇸 Verenigde Staten (+1)</option>
</select>
</div>
<div class="form-group">
<label>Provider (optioneel):</label>
<select id="carrier">
<option value="">Alle providers</option>
</select>
</div>
</div>
<div class="form-group">
<label>Voorbeeldnummer (optioneel):</label>
<input type="text" id="exampleNumber" placeholder="Bijv: 0612345678">
</div>
<button class="btn btn-primary" onclick="generateAndValidate()">
⚡ Genereer & Valideer Nummers
</button>

<div id="generatedNumbersSection" style="display: none; margin-top: 20px;">
<h3>📋 Gegenereerde Nummers</h3>
<div class="stats" id="generatedStats"></div>
<div class="action-buttons">
<button class="btn btn-success" onclick="sendToWhatsApp()">📤 Stuur naar WhatsApp Check</button>
<button class="btn btn-warning" onclick="clearGeneratedNumbers()">🗑️ Wissen</button>
</div>
</div>
</div>

<div class="card">
<h2>📊 Resultaten</h2>
<div id="stats" class="stats"></div>
<div class="table-container">
<table id="resultsTable">
<thead>
<tr>
<th>#</th>
<th>Nummer</th>
<th>Land</th>
<th>Provider</th>
<th>Status</th>
<th>Acties</th>
</tr>
</thead>
<tbody id="resultsBody"></tbody>
</table>
</div>
<div class="action-buttons">
<button class="btn btn-success" onclick="exportNumbers('csv')">📥 Export CSV</button>
<button class="btn btn-success" onclick="exportNumbers('txt')">📥 Export TXT</button>
<button class="btn btn-success" onclick="exportNumbers('json')">📥 Export JSON</button>
<button class="btn btn-warning" onclick="clearResults()">🗑️ Wissen</button>
</div>
</div>
</div>

<!-- WhatsApp Check Tab -->
<div id="whatsapp" class="tab-content">
<div class="card">
<h2>📱 WhatsApp Check</h2>

<!-- Pause/Resume Panel -->
<div class="pause-panel" id="pausePanel" style="display: none;">
<h3>⏸️ Gepauzeerde Checks</h3>
<div id="pausedChecksList">
<!-- Paused checks will be listed here -->
</div>
</div>

<!-- Rotatie status -->
<div class="rotation-panel" id="rotationPanel" style="display: none;">
<h3>🔄 Groep Rotatie</h3>
<div class="rotation-status">
<span id="rotationStatusText">Rotatie: <span class="rotation-inactive">Uitgeschakeld</span></span>
<span id="currentGroupText"></span>
<span id="nextRotationText"></span>
</div>
</div>

<div class="client-selection">
<h3>🔧 Selecteer WhatsApp Accounts</h3>
<div class="form-group">
<label>Gebruik groepsverdeling:</label>
<input type="checkbox" id="useGroups" checked>
<small>Verdeel nummers automatisch over alle verbonden accounts</small>
</div>
<div id="clientOptions" class="client-options">
<!-- Dynamisch ingevuld met beschikbare clients -->
</div>
</div>
<div class="form-group">
<label>Telefoonnummers (één per regel):</label>
<textarea id="whatsappNumbers" rows="10" placeholder="Voer nummers in, één per regel...
Of gebruik de 'Stuur naar WhatsApp Check' knop in de Generator tab"></textarea>
<small id="numbersCount">0 nummers ingevoerd</small>
</div>
<div class="action-buttons">
<button class="btn btn-success" onclick="startWhatsAppCheck()">
🔍 Start WhatsApp Check
</button>
<button class="btn btn-warning" onclick="pauseWhatsAppCheck()" style="display:none;" id="pauseButton">
⏸️ Pauzeer
</button>
<button class="btn btn-info" onclick="resumeWhatsAppCheck()" style="display:none;" id="resumeButton">
▶️ Hervat
</button>
<button class="btn btn-danger" onclick="stopWhatsAppCheck()" style="display:none;" id="stopButton">
🛑 Stop
</button>
</div>
</div>

<div class="card">
<h2>📊 WhatsApp Resultaten</h2>
<div id="whatsappStats" class="stats"></div>
<div class="progress" style="display:none;" id="progressBar">
<div class="progress-bar" id="progressFill"></div>
</div>
<div class="table-container">
<table id="whatsappResultsTable">
<thead>
<tr>
<th>Nummer</th>
<th>WhatsApp</th>
<th>Naam</th>
<th>Profielfoto</th>
<th>Bedrijf</th>
<th>About</th>
<th>Account</th>
<th>Status</th>
</tr>
</thead>
<tbody id="whatsappResultsBody"></tbody>
</table>
</div>
<div class="action-buttons">
<button class="btn btn-success" onclick="exportWhatsAppResults('csv')">📥 Export CSV</button>
<button class="btn btn-success" onclick="exportWhatsAppResults('txt')">📥 Export TXT</button>
<button class="btn btn-warning" onclick="clearWhatsAppResults()">🗑️ Wissen</button>
</div>
</div>
</div>

<!-- AI Analyse Tab -->
<div id="ai-analysis" class="tab-content">
<div class="card">
<h2>🤖 AI Profiel Analyse</h2>
<p>Automatische gezichtsherkenning voor leeftijd en geslacht detectie</p>

<div class="ai-stats" id="aiStats">
<div class="stat-card">
    <div class="stat-number" id="aiAnalyzed">0</div>
    <div class="stat-label">Geanalyseerd</div>
</div>
<div class="stat-card">
    <div class="stat-number" id="aiQueue">0</div>
    <div class="stat-label">In Wachtrij</div>
</div>
<div class="stat-card">
    <div class="stat-number" id="aiProcessing">0</div>
    <div class="stat-label">Actief</div>
</div>
<div class="stat-card">
    <div class="stat-number" id="aiWithFaces">0</div>
    <div class="stat-label">Gezichten</div>
</div>
</div>

<div class="realtime-updates" id="realtimeUpdates" style="display: none;">
<span class="progress-indicator"></span>
<span id="updateMessage">AI analyse bezig...</span>
</div>
</div>

<div class="card">
<h2>🎯 Filter Profielen</h2>

<div class="filter-panel">
<div class="filter-controls">
<div class="form-group">
    <label>Leeftijd Range:</label>
    <div class="age-range">
        <input type="range" id="minAge" min="18" max="60" value="18" class="age-slider">
        <input type="range" id="maxAge" min="18" max="60" value="60" class="age-slider">
    </div>
    <div class="age-display">
        <span id="minAgeDisplay">18</span> - <span id="maxAgeDisplay">60</span> jaar
    </div>
</div>

<div class="form-group">
    <label>Geslacht:</label>
    <div class="gender-options">
        <div class="gender-option selected" data-gender="any" onclick="selectGender(this)">Alle</div>
        <div class="gender-option" data-gender="man" onclick="selectGender(this)">👨 Man</div>
        <div class="gender-option" data-gender="woman" onclick="selectGender(this)">👩 Vrouw</div>
    </div>
</div>

<div class="form-group">
    <label>Minimale Betrouwbaarheid:</label>
    <input type="range" id="minConfidence" min="50" max="95" value="70">
    <div class="confidence-display">
        <span id="confidenceDisplay">70%</span>
        <div class="confidence-meter">
            <div class="confidence-fill" id="confidenceFill" style="width: 70%;"></div>
        </div>
    </div>
</div>
</div>

<button class="btn btn-primary" onclick="applyAIFilters()">
🎯 Filter Toepassen
</button>
<button class="btn btn-success" onclick="exportAIFiltered()">
📥 Export Gefilterd
</button>
</div>

<div class="analysis-progress">
<h3>📊 Geanalyseerde Profielen</h3>
<span id="filteredCount">0 resultaten</span>
</div>

<div id="aiResultsContainer">
<!-- AI resultaten worden hier dynamisch geladen -->
</div>
</div>

<div class="card">
<h2>🔍 Real-time Analyse Voortgang</h2>
<div id="analysisProgress">
<p>Wacht op WhatsApp check resultaten...</p>
</div>
</div>
</div>

<!-- index.html - VERVANG de hele accounts tab met deze code: -->
<div id="accounts" class="tab-content">
    <div class="card">
        <h2>👥 Account Management</h2>
        
        <!-- Virtual Accounts Section -->
        <div class="account-management">
            <h3>🤖 Auto TextNow Accounts</h3>
            <div class="form-row">
                <div class="form-group">
                    <label>Aantal accounts om aan te maken:</label>
                    <input type="number" id="accountCount" value="1" min="1" max="5">
                </div>
                <div class="form-group">
                    <label>Account Prefix:</label>
                    <input type="text" id="accountPrefix" value="virtual" placeholder="bijv: virtual">
                </div>
            </div>
            <button class="btn btn-success" onclick="createVirtualAccounts()">
                🚀 Create Auto Accounts
            </button>

            <div id="virtualAccountsContainer" class="accounts-grid" style="margin-top: 20px;">
                <!-- Virtual accounts worden hier getoond -->
            </div>
        </div>

        <!-- Regular WhatsApp Accounts -->
        <div class="account-management" style="margin-top: 30px;">
            <h3>➕ Normaal WhatsApp Account Toevoegen</h3>
            <div class="form-row">
                <div class="form-group">
                    <label>Account ID:</label>
                    <input type="text" id="newAccountId" placeholder="bijv: account1">
                </div>
                <div class="form-group">
                    <label>Weergavenaam:</label>
                    <input type="text" id="newAccountName" placeholder="Bijv: Mijn Hoofdaccount">
                </div>
                <div class="form-group">
                    <label>Groep:</label>
                    <select id="newAccountGroup">
                        <option value="default">Standaard</option>
                    </select>
                </div>
            </div>
            <div class="form-group">
                <label>
                    <input type="checkbox" id="newAccountAutoConnect" checked>
                    Automatisch verbinden bij opstarten
                </label>
            </div>
            <button class="btn btn-primary" onclick="addWhatsAppAccount()">
                ➕ Account Toevoegen
            </button>
        </div>

        <!-- Rotation Configuration -->
        <div class="rotation-panel">
            <h3>🔄 Groep Rotatie Configuratie</h3>
            <div class="form-row">
                <div class="form-group">
                    <label>Rotatie inschakelen:</label>
                    <input type="checkbox" id="rotationEnabled">
                </div>
                <div class="form-group">
                    <label>Interval (seconden):</label>
                    <input type="number" id="rotationInterval" value="300" min="30" max="3600">
                </div>
            </div>
            <div class="form-group">
                <label>Groepen voor rotatie (selecteer meerdere):</label>
                <select id="rotationGroups" multiple style="height: 100px;">
                    <option value="default">Standaard</option>
                    <option value="virtual">Virtual Accounts</option>
                </select>
                <small>Houd Ctrl ingedrukt om meerdere groepen te selecteren</small>
            </div>
            <button class="btn btn-primary" onclick="saveRotationConfig()">
                💾 Opslaan Rotatie Config
            </button>
        </div>

        <div id="accountsStatus">
            <!-- Account status wordt hier dynamisch geladen -->
        </div>
    </div>
</div>

<script>
// Virtual Accounts Management
async function createVirtualAccounts() {
    const count = document.getElementById('accountCount').value;
    const prefix = document.getElementById('accountPrefix').value || 'virtual';
    
    for (let i = 0; i < count; i++) {
        const accountId = `${prefix}-${Date.now()}-${i}`;
        
        try {
            const response = await fetch('/api/create-virtual-account', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ accountId })
            });
            
            const result = await response.json();
            
            if (result.success) {
                addVirtualAccountToUI(result);
                pollAccountStatus(accountId);
                showStatus(`✅ Account ${accountId} creation started!`);
            } else {
                showStatus(`❌ Failed to create account: ${result.error}`, 'error');
            }
            
            // Wait between account creations
            await new Promise(resolve => setTimeout(resolve, 10000));
            
        } catch (error) {
            console.error('Error creating account:', error);
            showStatus(`❌ Error: ${error.message}`, 'error');
        }
    }
}

function addVirtualAccountToUI(accountData) {
    const container = document.getElementById('virtualAccountsContainer');
    
    const accountCard = document.createElement('div');
    accountCard.className = 'whatsapp-account-card';
    accountCard.id = `account-${accountData.accountId}`;
    accountCard.innerHTML = `
        <div class="account-header">
            <div class="account-name">${accountData.accountId}</div>
            <div class="account-status status-waiting" id="status-${accountData.accountId}">
                ⏳ Creating...
            </div>
        </div>
        <div class="account-details">
            <div><strong>TextNow:</strong> ${accountData.textNowNumber}</div>
            <div><strong>Status:</strong> <span id="detail-status-${accountData.accountId}">Initializing</span></div>
            ${accountData.qrCode ? `
            <div class="qr-section">
                <p>📱 Scan WhatsApp QR Code:</p>
                <img src="${accountData.qrCode}" alt="QR Code" class="qr-image">
                <p style="font-size: 12px; color: #666;">Scan met WhatsApp om te verbinden</p>
            </div>
            ` : '<div>🔄 Generating QR code...</div>'}
        </div>
        <div class="action-buttons">
            <button class="btn btn-danger btn-sm" onclick="disconnectVirtualAccount('${accountData.accountId}')">
                🗑️ Delete
            </button>
            <button class="btn btn-info btn-sm" onclick="refreshQRCode('${accountData.accountId}')">
                🔄 Refresh QR
            </button>
        </div>
    `;
    
    container.appendChild(accountCard);
}

async function pollAccountStatus(accountId) {
    const interval = setInterval(async () => {
        try {
            const response = await fetch(`/api/virtual-session/${accountId}`);
            const data = await response.json();
            
            if (data.success) {
                updateVirtualAccountUI(accountId, data.session);
                
                if (data.session.status === 'connected' || data.session.status === 'auth_failure') {
                    clearInterval(interval);
                    if (data.session.status === 'connected') {
                        showStatus(`✅ Account ${accountId} connected successfully!`);
                    }
                }
            } else {
                clearInterval(interval);
            }
        } catch (error) {
            console.error('Error polling account status:', error);
            clearInterval(interval);
        }
    }, 3000);
}

function updateVirtualAccountUI(accountId, session) {
    const statusElement = document.getElementById(`status-${accountId}`);
    const detailElement = document.getElementById(`detail-status-${accountId}`);
    
    if (statusElement && detailElement) {
        let statusClass = 'status-waiting';
        let statusText = '⏳ Waiting QR';
        
        if (session.status === 'connected') {
            statusClass = 'status-connected';
            statusText = '✅ Connected';
        } else if (session.status === 'auth_failure') {
            statusClass = 'status-disconnected';
            statusText = '❌ Auth Failed';
        }
        
        statusElement.className = `account-status ${statusClass}`;
        statusElement.textContent = statusText;
        detailElement.textContent = session.status;
        
        // Update QR code if available
        if (session.qrCode) {
            const qrImage = document.querySelector(`#account-${accountId} .qr-image`);
            if (qrImage && qrImage.src !== session.qrCode) {
                qrImage.src = session.qrCode;
            }
        }
    }
}

async function disconnectVirtualAccount(accountId) {
    try {
        const response = await fetch(`/api/disconnect-virtual/${accountId}`, {
            method: 'POST'
        });
        
        const data = await response.json();
        if (data.success) {
            document.getElementById(`account-${accountId}`).remove();
            showStatus(`✅ Account ${accountId} disconnected`);
        }
    } catch (error) {
        console.error('Error disconnecting account:', error);
        showStatus(`❌ Error disconnecting account: ${error.message}`, 'error');
    }
}

async function refreshQRCode(accountId) {
    showStatus(`🔄 Refreshing QR code for ${accountId}...`);
    // Implementation for QR refresh would need additional backend support
}

function showStatus(message, type = 'info') {
    // Simple status display - you can enhance this with toast notifications
    console.log(`${type}: ${message}`);
    alert(message);
}

// Load existing virtual sessions on page load
async function loadVirtualSessions() {
    try {
        const response = await fetch('/api/virtual-sessions');
        const data = await response.json();
        
        if (data.success) {
            data.sessions.forEach(session => {
                addVirtualAccountToUI({
                    accountId: session.accountId,
                    textNowNumber: session.textNowNumber,
                    qrCode: session.qrCode,
                    status: session.status
                });
                
                if (session.status === 'waiting_qr') {
                    pollAccountStatus(session.accountId);
                }
            });
        }
    } catch (error) {
        console.error('Error loading virtual sessions:', error);
    }
}

// Update the existing loadWhatsAppStatus function to include virtual accounts
async function loadWhatsAppStatus() {
    try {
        const response = await fetch(`${API_BASE}/whatsapp-status`);
        const data = await response.json();
        
        displayAccountsStatus(data);
        updateClientSelection(data);
        updateGroupSelection(data);
        updateRotationStatus(data);
        
        // Also load virtual sessions
        loadVirtualSessions();
    } catch (error) {
        console.error('Error loading WhatsApp status:', error);
        document.getElementById('accountsStatus').innerHTML = '<p>❌ Fout bij laden WhatsApp status</p>';
    }
}

// Initialize virtual accounts when accounts tab is loaded
document.addEventListener('DOMContentLoaded', function() {
    // Load virtual sessions when accounts tab is active
    const accountsTab = document.querySelector('[data-tab="accounts"]');
    if (accountsTab) {
        accountsTab.addEventListener('click', loadVirtualSessions);
    }
});
</script>
<!-- Configuratie Tab -->
<div id="config" class="tab-content">
<div class="card">
<h2>⚙️ Configuratie</h2>
<div class="form-group">
<label>Numverify API Key:</label>
<input type="password" id="numverifyKey" placeholder="Voer je API key in">
<small>Voor geavanceerde validatie (optioneel)</small>
</div>
<button class="btn btn-primary" onclick="saveConfig()">💾 Opslaan</button>
</div>

<div class="card">
<h2>🔧 Systeem Status</h2>
<div id="systemStatus"></div>
<button class="btn btn-warning" onclick="checkSystemStatus()">🔄 Status Vernieuwen</button>
</div>
</div>
</div>

<script>
const API_BASE = "http://localhost:3000/api";
let generatedNumbers = [];
let currentCheckId = null;
let currentProgress = 0;
let currentResults = [];
let aiAnalysisData = [];
let currentFilters = {
    minAge: 18,
    maxAge: 60,
    gender: 'any',
    minConfidence: 70
};

// Tab management
document.querySelectorAll('.tab-button').forEach(button => {
button.addEventListener('click', () => {
const tabName = button.getAttribute('data-tab');
    
// Update buttons
document.querySelectorAll('.tab-button').forEach(btn => btn.classList.remove('active'));
button.classList.add('active');
    
// Update content
document.querySelectorAll('.tab-content').forEach(content => content.classList.remove('active'));
document.getElementById(tabName).classList.add('active');
    
// Load tab-specific data
if (tabName === 'ai-analysis') {
loadAIAnalysis();
startAIUpdates();
} else if (tabName === 'accounts') {
loadWhatsAppStatus();
loadGroups();
loadRotationConfig();
} else if (tabName === 'whatsapp') {
updateClientSelection();
updateNumbersCount();
loadPausedChecks();
}
});
});

// Pause/Resume functionality
async function loadPausedChecks() {
try {
const response = await fetch(`${API_BASE}/paused-checks`);
const data = await response.json();
    
if (data.success && data.checks.length > 0) {
const pausePanel = document.getElementById('pausePanel');
const pausedChecksList = document.getElementById('pausedChecksList');
    
pausePanel.style.display = 'block';
    
let html = '';
data.checks.forEach(check => {
    html += `
    <div class="paused-check">
        <div style="display: flex; justify-content: space-between; align-items: center;">
            <div>
                <strong>Check ID:</strong> ${check.checkId}<br>
                <strong>Voortgang:</strong> ${check.currentIndex + 1} / ${check.numbers.length}<br>
                <strong>Gepauzeerd:</strong> ${new Date(check.pausedAt).toLocaleString()}
            </div>
            <div>
                <button class="btn btn-sm btn-info" onclick="resumeSpecificCheck('${check.checkId}')">
                    ▶️ Hervat
                </button>
            </div>
        </div>
    </div>
    `;
});
    
pausedChecksList.innerHTML = html;
} else {
document.getElementById('pausePanel').style.display = 'none';
}
} catch (error) {
console.error('Error loading paused checks:', error);
}
}

async function pauseWhatsAppCheck() {
if (!currentCheckId) return;

const numbersText = document.getElementById('whatsappNumbers').value;
const numbers = numbersText.split('\n').map(num => num.trim()).filter(num => num.length > 0);

try {
const response = await fetch(`${API_BASE}/pause-check`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
    checkId: currentCheckId,
    numbers: numbers,
    currentIndex: currentProgress,
    results: currentResults
})
});

const data = await response.json();
if (data.success) {
alert(`✅ Check gepauzeerd bij nummer ${currentProgress + 1}`);
document.getElementById('pauseButton').style.display = 'none';
document.getElementById('resumeButton').style.display = 'inline-block';
document.getElementById('stopButton').style.display = 'none';
loadPausedChecks();
}
} catch (error) {
console.error('Error pausing check:', error);
alert('❌ Fout bij pauzeren: ' + error.message);
}
}

async function resumeWhatsAppCheck() {
if (!currentCheckId) return;

try {
const response = await fetch(`${API_BASE}/resume-check`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ checkId: currentCheckId })
});

const data = await response.json();
if (data.success) {
alert(`✅ Check hervat vanaf nummer ${data.data.currentIndex + 1}`);
startWhatsAppCheckWithResume(data.data);
}
} catch (error) {
console.error('Error resuming check:', error);
alert('❌ Fout bij hervatten: ' + error.message);
}
}

async function resumeSpecificCheck(checkId) {
try {
const response = await fetch(`${API_BASE}/resume-check`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ checkId: checkId })
});

const data = await response.json();
if (data.success) {
currentCheckId = checkId;
alert(`✅ Check hervat vanaf nummer ${data.data.currentIndex + 1}`);
startWhatsAppCheckWithResume(data.data);
}
} catch (error) {
console.error('Error resuming specific check:', error);
alert('❌ Fout bij hervatten: ' + error.message);
}
}

function startWhatsAppCheckWithResume(resumeData) {
const numbers = resumeData.numbers;
const resumeFrom = resumeData.currentIndex;
currentResults = resumeData.results || [];

// Update de textarea met de nummers
document.getElementById('whatsappNumbers').value = numbers.join('\n');
updateNumbersCount();

// Toon de bestaande resultaten
currentResults.forEach(result => {
if (result && result.number) {
    addWhatsAppResult(result);
}
});

// Start de check vanaf het gepauzeerde punt
startWhatsAppCheckResume(resumeFrom);
}

async function startWhatsAppCheckResume(resumeFrom = 0) {
const numbersText = document.getElementById('whatsappNumbers').value;
const useGroups = document.getElementById('useGroups').checked;
    
if (!numbersText.trim()) {
alert('❌ Voer telefoonnummers in of gebruik de "Stuur naar WhatsApp Check" knop in de Generator tab');
return;
}

const numbers = numbersText.split('\n')
.map(num => num.trim())
.filter(num => num.length > 0);

if (numbers.length === 0) {
alert('❌ Geen geldige nummers gevonden');
return;
}

if (!currentCheckId) {
currentCheckId = Date.now().toString();
}

const pauseButton = document.getElementById('pauseButton');
const resumeButton = document.getElementById('resumeButton');
const stopButton = document.getElementById('stopButton');
    
pauseButton.style.display = 'inline-block';
resumeButton.style.display = 'none';
stopButton.style.display = 'inline-block';

// Toon voortgangsbar
const progressBar = document.getElementById('progressBar');
progressBar.style.display = 'block';
document.getElementById('progressFill').style.width = `${(resumeFrom / numbers.length) * 100}%`;

try {
const response = await fetch(`${API_BASE}/progressive-whatsapp-check`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
    numbers: numbers,
    useGroups: useGroups,
    checkId: currentCheckId,
    resumeFrom: resumeFrom
})
});

if (!response.ok) {
throw new Error('Server error: ' + response.status);
}

const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
const { done, value } = await reader.read();
if (done) break;

const chunk = decoder.decode(value);
const lines = chunk.split('\n').filter(line => line.trim());

for (const line of lines) {
    try {
    const data = JSON.parse(line);
    currentProgress = data.progress;
    updateWhatsAppProgress(data);
    } catch (e) {
    console.error('Error parsing chunk:', e);
    }
}
}

} catch (error) {
console.error('WhatsApp check error:', error);
alert('WhatsApp check mislukt: ' + error.message);
} finally {
pauseButton.style.display = 'none';
resumeButton.style.display = 'none';
stopButton.style.display = 'none';
progressBar.style.display = 'none';
currentCheckId = null;
currentProgress = 0;
}
}

// Update aantal nummers in WhatsApp tab
function updateNumbersCount() {
const textarea = document.getElementById('whatsappNumbers');
const countElement = document.getElementById('numbersCount');
if (textarea && countElement) {
const numbers = textarea.value.split('\n').filter(n => n.trim());
countElement.textContent = `${numbers.length} nummers ingevoerd`;
}
}

document.getElementById('whatsappNumbers').addEventListener('input', updateNumbersCount);

// Land en provider management
document.getElementById('country').addEventListener('change', function() {
updateCarriers(this.value);
});

// WhatsApp account management
async function loadWhatsAppStatus() {
try {
const response = await fetch(`${API_BASE}/whatsapp-status`);
const data = await response.json();
    
displayAccountsStatus(data);
updateClientSelection(data);
updateGroupSelection(data);
updateRotationStatus(data);
} catch (error) {
console.error('Error loading WhatsApp status:', error);
document.getElementById('accountsStatus').innerHTML = '<p>❌ Fout bij laden WhatsApp status</p>';
}
}

function updateRotationStatus(data) {
const rotationPanel = document.getElementById('rotationPanel');
const rotationStatusText = document.getElementById('rotationStatusText');
const currentGroupText = document.getElementById('currentGroupText');
const nextRotationText = document.getElementById('nextRotationText');

if (data.rotation && data.rotation.enabled) {
rotationPanel.style.display = 'block';
rotationStatusText.innerHTML = 'Rotatie: <span class="rotation-active">Ingeschakeld</span>';
currentGroupText.textContent = `Huidige groep: ${data.rotation.currentGroup || 'Geen'}`;
nextRotationText.textContent = `Volgende wissel: over ${data.rotation.interval} seconden`;
} else {
rotationPanel.style.display = 'block';
rotationStatusText.innerHTML = 'Rotatie: <span class="rotation-inactive">Uitgeschakeld</span>';
currentGroupText.textContent = '';
nextRotationText.textContent = '';
}
}

async function loadRotationConfig() {
try {
const response = await fetch(`${API_BASE}/whatsapp-status`);
const data = await response.json();
    
if (data.rotation) {
document.getElementById('rotationEnabled').checked = data.rotation.enabled || false;
document.getElementById('rotationInterval').value = data.rotation.interval || 300;
    
// Vul groepen select
const groupsSelect = document.getElementById('rotationGroups');
groupsSelect.innerHTML = '';
    
if (data.config && data.config.groups) {
Object.keys(data.config.groups).forEach(groupId => {
    const group = data.config.groups[groupId];
    const option = document.createElement('option');
    option.value = groupId;
    option.textContent = group.name;
    option.selected = data.rotation.groups?.includes(groupId) || false;
    groupsSelect.appendChild(option);
});
}
}
} catch (error) {
console.error('Error loading rotation config:', error);
}
}

async function saveRotationConfig() {
const enabled = document.getElementById('rotationEnabled').checked;
const interval = parseInt(document.getElementById('rotationInterval').value);
const groupsSelect = document.getElementById('rotationGroups');
const groups = Array.from(groupsSelect.selectedOptions).map(opt => opt.value);

try {
const response = await fetch(`${API_BASE}/rotation-config`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ enabled, interval, groups })
});

const result = await response.json();
if (result.success) {
alert('Rotatie configuratie opgeslagen!');
loadWhatsAppStatus();
} else {
alert('Fout: ' + result.error);
}
} catch (error) {
alert('Fout bij opslaan rotatie config: ' + error.message);
}
}

function displayAccountsStatus(data) {
const container = document.getElementById('accountsStatus');
if (!container) return;

let html = '<h3>📊 Account Status Overzicht</h3>';
    
// Toon groepen
if (data.groups) {
html += '<div class="groups-overview">';
Object.keys(data.groups).forEach(groupName => {
const group = data.groups[groupName];
const isActiveGroup = data.rotation?.currentGroup === groupName;
    
html += `
<div class="group-section" style="border-left-color: ${group.color}">
<div class="group-header">
<div class="group-name">${group.name} ${isActiveGroup ? '🔄' : ''}</div>
<div class="group-stats">${group.ready}/${group.total} verbonden</div>
</div>
<div class="accounts-grid">
${group.clients.map(client => `
<div class="whatsapp-account-card">
<div class="account-header">
<div class="account-name">${client.name}</div>
<div class="account-status status-${client.ready ? 'connected' : 'waiting'} ${client.activeForRotation ? 'status-active' : ''}">
${client.ready ? '✅ Verbonden' : '⏳ Wacht op QR'} ${client.activeForRotation ? ' 🔄' : ''}
</div>
</div>
<div class="account-details">
<div>ID: ${client.id}</div>
<div>Status: ${client.status}</div>
${!client.ready && client.qrDataURL ? `
<div class="qr-section">
<p>📱 Scan QR Code:</p>
<img src="${client.qrDataURL}" alt="QR Code" class="qr-image">
</div>
` : ''}
</div>
<div class="account-actions">
<button class="btn btn-danger btn-sm" onclick="stopAccount('${client.id}')">🛑 Stop</button>
<button class="btn btn-warning btn-sm" onclick="restartAccount('${client.id}')">🔄 Herstart</button>
</div>
</div>
`).join('')}
</div>
</div>
`;
});
html += '</div>';
}
    
container.innerHTML = html;
}

// Stuur gegenereerde nummers naar WhatsApp check
function sendToWhatsApp() {
if (generatedNumbers.length === 0) {
alert('❌ Geen gegenereerde nummers om te versturen');
return;
}

// Filter alleen geldige nummers
const validNumbers = generatedNumbers.filter(num => 
num.validation?.valid || 
(num.carrier && num.carrier !== 'Unknown') ||
num.validation?.forcedValid
);

if (validNumbers.length === 0) {
alert('❌ Geen geldige nummers om te versturen');
return;
}

// Converteer naar tekst (één nummer per regel)
const numbersText = validNumbers.map(num => num.number).join('\n');

// Vul WhatsApp textarea
document.getElementById('whatsappNumbers').value = numbersText;
updateNumbersCount();

// Schakel naar WhatsApp tab
document.querySelector('[data-tab="whatsapp"]').click();

alert(`✅ ${validNumbers.length} geldige nummers naar WhatsApp check gestuurd!`);
}

// Toon gegenereerde nummers
function showGeneratedNumbers(results, stats) {
const section = document.getElementById('generatedNumbersSection');
const statsContainer = document.getElementById('generatedStats');
    
section.style.display = 'block';
    
// Update stats
if (statsContainer) {
const validCount = results.filter(num => 
num.validation?.valid || 
(num.carrier && num.carrier !== 'Unknown') ||
num.validation?.forcedValid
).length;

statsContainer.innerHTML = `
<div class="stat-card">
<div class="stat-number">${results.length}</div>
<div class="stat-label">Totaal</div>
</div>
<div class="stat-card">
<div class="stat-number">${validCount}</div>
<div class="stat-label">Geldig</div>
</div>
<div class="stat-card">
<div class="stat-number">${stats.withProvider || 0}</div>
<div class="stat-label">Met Provider</div>
</div>
<div class="stat-card">
<div class="stat-number">${validCount > 0 ? Math.round((validCount / results.length) * 100) : 0}%</div>
<div class="stat-label">Success Rate</div>
</div>
`;
}

// Bewaar gegenereerde nummers
generatedNumbers = results;
}

// Wis gegenereerde nummers
function clearGeneratedNumbers() {
generatedNumbers = [];
document.getElementById('generatedNumbersSection').style.display = 'none';
document.getElementById('generatedStats').innerHTML = '';
}

// WhatsApp check functies
async function startWhatsAppCheck() {
const numbersText = document.getElementById('whatsappNumbers').value;
const useGroups = document.getElementById('useGroups').checked;
    
if (!numbersText.trim()) {
alert('❌ Voer telefoonnummers in of gebruik de "Stuur naar WhatsApp Check" knop in de Generator tab');
return;
}

const numbers = numbersText.split('\n')
.map(num => num.trim())
.filter(num => num.length > 0);

if (numbers.length === 0) {
alert('❌ Geen geldige nummers gevonden');
return;
}

currentCheckId = Date.now().toString();
currentProgress = 0;
currentResults = [];

const pauseButton = document.getElementById('pauseButton');
const resumeButton = document.getElementById('resumeButton');
const stopButton = document.getElementById('stopButton');
    
pauseButton.style.display = 'inline-block';
resumeButton.style.display = 'none';
stopButton.style.display = 'inline-block';

// Toon voortgangsbar
const progressBar = document.getElementById('progressBar');
progressBar.style.display = 'block';
document.getElementById('progressFill').style.width = '0%';

// Wis vorige resultaten
document.getElementById('whatsappResultsBody').innerHTML = '';

try {
const response = await fetch(`${API_BASE}/progressive-whatsapp-check`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
    numbers: numbers,
    useGroups: useGroups,
    checkId: currentCheckId
})
});

if (!response.ok) {
throw new Error('Server error: ' + response.status);
}

const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
const { done, value } = await reader.read();
if (done) break;

const chunk = decoder.decode(value);
const lines = chunk.split('\n').filter(line => line.trim());

for (const line of lines) {
    try {
    const data = JSON.parse(line);
    currentProgress = data.progress;
    currentResults.push(data.result);
    updateWhatsAppProgress(data);
    } catch (e) {
    console.error('Error parsing chunk:', e);
    }
}
}

} catch (error) {
console.error('WhatsApp check error:', error);
alert('WhatsApp check mislukt: ' + error.message);
} finally {
pauseButton.style.display = 'none';
resumeButton.style.display = 'none';
stopButton.style.display = 'none';
progressBar.style.display = 'none';
currentCheckId = null;
currentProgress = 0;
}
}

function updateWhatsAppProgress(data) {
// Update progress bar
const progressFill = document.getElementById('progressFill');
if (progressFill) {
progressFill.style.width = `${data.percentage}%`;
}

// Update stats
updateWhatsAppStats(data);

// Add result to table
if (data.result) {
addWhatsAppResult(data.result);
}
}

function updateWhatsAppStats(data) {
const statsContainer = document.getElementById('whatsappStats');
if (!statsContainer) return;

// Bereken statistieken
const totalProcessed = data.progress || 0;
const total = data.total || 0;
const hasWhatsApp = currentResults.filter(r => r && r.hasWhatsApp).length;
const hasProfile = currentResults.filter(r => r && r.profileExists).length;
const isBusiness = currentResults.filter(r => r && r.isBusiness).length;

statsContainer.innerHTML = `
<div class="stat-card">
<div class="stat-number">${totalProcessed}</div>
<div class="stat-label">Verwerkt</div>
</div>
<div class="stat-card">
<div class="stat-number">${hasWhatsApp}</div>
<div class="stat-label">WhatsApp</div>
</div>
<div class="stat-card">
<div class="stat-number">${hasProfile}</div>
<div class="stat-label">Profielfoto</div>
</div>
<div class="stat-card">
<div class="stat-number">${isBusiness}</div>
<div class="stat-label">Bedrijf</div>
</div>
`;
}

function addWhatsAppResult(result) {
const tbody = document.getElementById('whatsappResultsBody');
if (!tbody) return;

const row = document.createElement('tr');
const profilePic = result.profilePic ? 
`<img src="${result.profilePic}" alt="Profile" class="profile-image" onerror="this.style.display='none'">` : 
'❌';

const aboutText = result.about ? (result.about.length > 30 ? result.about.substring(0, 30) + '...' : result.about) : '';

row.innerHTML = `
<td>${result.number}</td>
<td>${result.hasWhatsApp ? '✅' : '❌'}</td>
<td>${result.name || ''}</td>
<td>${profilePic}</td>
<td>${result.isBusiness ? '🏢' : ''}</td>
<td title="${result.about || ''}">${aboutText}</td>
<td>${result.clientName || ''}</td>
<td>${result.status}</td>
`;

if (result.hasWhatsApp) {
row.style.background = 'rgba(76, 175, 80, 0.05)';
}

// Voeg profiel details toe als tooltip
if (result.about || result.lastSeen) {
row.title = `About: ${result.about || 'Geen'}\nLast Seen: ${result.lastSeen || 'Onbekend'}`;
}

tbody.appendChild(row);
}

async function stopWhatsAppCheck() {
if (!currentCheckId) return;

try {
await fetch(`${API_BASE}/stop-whatsapp-check`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ checkId: currentCheckId })
});
    
alert('🛑 WhatsApp check gestopt');
document.getElementById('pauseButton').style.display = 'none';
document.getElementById('resumeButton').style.display = 'none';
document.getElementById('stopButton').style.display = 'none';
} catch (error) {
console.error('Error stopping check:', error);
}
}

// Account management functies
async function addWhatsAppAccount() {
const accountId = document.getElementById('newAccountId').value;
const accountName = document.getElementById('newAccountName').value;
const group = document.getElementById('newAccountGroup').value;
const autoConnect = document.getElementById('newAccountAutoConnect').checked;

if (!accountId) {
alert('Voer een account ID in');
return;
}

try {
const response = await fetch(`${API_BASE}/whatsapp-accounts`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
action: 'add',
account: { id: accountId, name: accountName, group: group, autoConnect: autoConnect }
})
});

const result = await response.json();
if (result.success) {
alert('Account toegevoegd!');
document.getElementById('newAccountId').value = '';
document.getElementById('newAccountName').value = '';
loadWhatsAppStatus();
} else {
alert('Fout: ' + result.error);
}
} catch (error) {
alert('Fout bij toevoegen account: ' + error.message);
}
}

async function stopAccount(accountId) {
try {
const response = await fetch(`${API_BASE}/whatsapp-accounts`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ action: 'stop', account: { id: accountId } })
});
    
const result = await response.json();
if (result.success) {
alert('Account gestopt!');
loadWhatsAppStatus();
}
} catch (error) {
alert('Fout bij stoppen account: ' + error.message);
}
}

async function restartAccount(accountId) {
try {
const response = await fetch(`${API_BASE}/whatsapp-accounts`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ action: 'start', account: { id: accountId } })
});
    
const result = await response.json();
if (result.success) {
alert('Account herstart!');
loadWhatsAppStatus();
}
} catch (error) {
alert('Fout bij herstarten account: ' + error.message);
}
}

// Groepsmanagement
async function loadGroups() {
try {
const response = await fetch(`${API_BASE}/whatsapp-accounts`);
const data = await response.json();
displayGroups(data.groups);
} catch (error) {
console.error('Error loading groups:', error);
}
}

function displayGroups(groups) {
const container = document.getElementById('groupsList');
if (!container) return;

let html = '<div class="groups-grid">';
Object.keys(groups).forEach(groupId => {
const group = groups[groupId];
html += `
<div class="group-card" style="border-left-color: ${group.color}">
<div class="group-header">
<div class="group-name">${group.name}</div>
<div class="group-actions">
<button class="btn btn-warning btn-sm" onclick="editGroup('${groupId}')">✏️</button>
<button class="btn btn-danger btn-sm" onclick="deleteGroup('${groupId}')">🗑️</button>
</div>
</div>
<div class="group-details">
<div>ID: ${groupId}</div>
<div>Kleur: <span style="color:${group.color}">${group.color}</span></div>
</div>
</div>
`;
});
html += '</div>';
container.innerHTML = html;
}

async function addGroup() {
const groupId = document.getElementById('newGroupId').value;
const groupName = document.getElementById('newGroupName').value;
const groupColor = document.getElementById('newGroupColor').value;

if (!groupId) {
alert('Voer een groep ID in');
return;
}

try {
const response = await fetch(`${API_BASE}/whatsapp-groups`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
action: 'add',
group: { id: groupId, name: groupName, color: groupColor }
})
});

const result = await response.json();
if (result.success) {
alert('Groep toegevoegd!');
document.getElementById('newGroupId').value = '';
document.getElementById('newGroupName').value = '';
loadGroups();
loadWhatsAppStatus();
loadRotationConfig();
} else {
alert('Fout: ' + result.error);
}
} catch (error) {
alert('Fout bij toevoegen groep: ' + error.message);
}
}

function updateGroupSelection(data) {
const select = document.getElementById('newAccountGroup');
const rotationSelect = document.getElementById('rotationGroups');
    
if (!select) return;

// Bewaar huidige selectie
const currentValue = select.value;

// Clear en vul opnieuw
select.innerHTML = '<option value="default">Standaard</option>';

if (data.config && data.config.groups) {
Object.keys(data.config.groups).forEach(groupId => {
const group = data.config.groups[groupId];
const option = document.createElement('option');
option.value = groupId;
option.textContent = group.name;
select.appendChild(option);
});
}

// Herstel selectie als mogelijk
if (currentValue && Array.from(select.options).some(opt => opt.value === currentValue)) {
select.value = currentValue;
}
}

function updateClientSelection(data = null) {
const container = document.getElementById('clientOptions');
if (!container) return;

if (!data) {
container.innerHTML = '<div class="client-option">🔄 Laden...</div>';
return;
}

let html = '';
if (data.clients) {
Object.keys(data.clients).forEach(clientId => {
const client = data.clients[clientId];
const isReady = client.ready && client.activeForRotation !== false;
const isSelected = isReady; // Standaard selecteren ready clients

html += `
<div class="client-option ${isReady ? 'ready' : ''} ${isSelected ? 'selected' : ''}" 
onclick="toggleClientSelection(this, '${clientId}')" 
data-client-id="${clientId}">
${isReady ? '✅' : '⏳'} ${client.customName || clientId}
${client.group ? ` (${client.group})` : ''}
${client.activeForRotation === false ? ' 🔄' : ''}
</div>
`;
});
}

container.innerHTML = html || '<div class="client-option">Geen accounts beschikbaar</div>';
}

function toggleClientSelection(element, clientId) {
if (!element.classList.contains('ready')) return;
element.classList.toggle('selected');
}

// Land en carrier functies
async function updateCarriers(country) {
try {
const response = await fetch(`${API_BASE}/carriers/${country}`);
const carriers = await response.json();
    
const carrierSelect = document.getElementById('carrier');
carrierSelect.innerHTML = '<option value="">Alle providers</option>';
    
carriers.forEach(carrier => {
const option = document.createElement('option');
option.value = carrier;
option.textContent = carrier;
carrierSelect.appendChild(option);
});
} catch (error) {
console.error('Error loading carriers:', error);
}
}

// Generator functies
async function generateAndValidate() {
const count = document.getElementById('count').value;
const country = document.getElementById('country').value;
const carrier = document.getElementById('carrier').value || null;
const exampleNumber = document.getElementById('exampleNumber').value || null;

try {
const response = await fetch(`${API_BASE}/fast-generate-validate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ count, country, carrier, exampleNumber })
});

const data = await response.json();
if (data.success) {
displayResults(data.results, data.stats);
showGeneratedNumbers(data.results, data.stats);
} else {
alert('Fout: ' + data.error);
}
} catch (error) {
alert('Fout bij genereren: ' + error.message);
}
}

function displayResults(results, stats) {
const tbody = document.getElementById('resultsBody');
const statsContainer = document.getElementById('stats');
    
// Update stats
if (statsContainer) {
statsContainer.innerHTML = `
<div class="stat-card">
<div class="stat-number">${stats.total}</div>
<div class="stat-label">Totaal</div>
</div>
<div class="stat-card">
<div class="stat-number">${stats.valid}</div>
<div class="stat-label">Geldig</div>
</div>
<div class="stat-card">
<div class="stat-number">${stats.withProvider || 0}</div>
<div class="stat-label">Met Provider</div>
</div>
<div class="stat-card">
<div class="stat-number">${stats.total > 0 ? Math.round((stats.valid / stats.total) * 100) : 0}%</div>
<div class="stat-label">Success Rate</div>
</div>
`;
}

// Update table
if (tbody) {
tbody.innerHTML = '';
results.slice(0, 100).forEach((result, index) => {
const row = document.createElement('tr');
const isValid = result.validation?.valid || (result.carrier && result.carrier !== 'Unknown');
        
row.innerHTML = `
<td>${index + 1}</td>
<td>${result.number}</td>
<td>${result.country}</td>
<td>${result.carrier || 'Onbekend'}</td>
<td>${isValid ? '✅ Geldig' : '❌ Ongeldig'}</td>
<td>
<button class="btn btn-sm btn-primary" onclick="testWhatsAppNumber('${result.number}')">Test WhatsApp</button>
</td>
`;
        
if (isValid) {
row.style.background = 'rgba(76, 175, 80, 0.05)';
}
        
tbody.appendChild(row);
});
}
}

// Export functies
async function exportNumbers(format) {
if (generatedNumbers.length === 0) {
alert('❌ Geen nummers om te exporteren');
return;
}

const numbersToExport = generatedNumbers.map(num => num.number);

try {
const response = await fetch(`${API_BASE}/export-numbers`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ numbers: numbersToExport, format })
});

const data = await response.json();
if (data.success) {
// Download het bestand
const blob = new Blob([data.content], { type: data.mimeType });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = data.filename;
a.click();
URL.revokeObjectURL(url);
alert(`✅ ${generatedNumbers.length} nummers geëxporteerd als ${data.filename}`);
} else {
alert('Fout bij exporteren: ' + data.error);
}
} catch (error) {
alert('Fout bij exporteren: ' + error.message);
}
}

async function exportWhatsAppResults(format) {
const rows = document.querySelectorAll('#whatsappResultsBody tr');
if (rows.length === 0) {
alert('❌ Geen WhatsApp resultaten om te exporteren');
return;
}

const numbers = [];
rows.forEach(row => {
const cells = row.querySelectorAll('td');
if (cells.length > 0) {
numbers.push(cells[0].textContent);
}
});

try {
const response = await fetch(`${API_BASE}/export-numbers`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ numbers, format })
});

const data = await response.json();
if (data.success) {
// Download het bestand
const blob = new Blob([data.content], { type: data.mimeType });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `whatsapp-${data.filename}`;
a.click();
URL.revokeObjectURL(url);
alert(`✅ ${numbers.length} WhatsApp nummers geëxporteerd`);
} else {
alert('Fout bij exporteren: ' + data.error);
}
} catch (error) {
alert('Fout bij exporteren: ' + error.message);
}
}

function clearResults() {
document.getElementById('resultsBody').innerHTML = '';
document.getElementById('stats').innerHTML = '';
}

function clearWhatsAppResults() {
document.getElementById('whatsappResultsBody').innerHTML = '';
document.getElementById('whatsappStats').innerHTML = '';
document.getElementById('whatsappNumbers').value = '';
updateNumbersCount();
}

// AI Analyse functies
async function loadAIAnalysis() {
try {
const response = await fetch(`${API_BASE}/ai-analysis`);
const data = await response.json();
    
if (data.success) {
aiAnalysisData = data.results;
updateAIDisplay();
updateAIStats();
}
} catch (error) {
console.error('Error loading AI analysis:', error);
}
}

async function updateAIStats() {
try {
const response = await fetch(`${API_BASE}/whatsapp-status`);
const data = await response.json();
    
if (data.aiAnalysis) {
document.getElementById('aiAnalyzed').textContent = data.aiAnalysis.analyzedCount;
document.getElementById('aiQueue').textContent = data.aiAnalysis.queueSize;
document.getElementById('aiProcessing').textContent = data.aiAnalysis.isProcessing ? '1' : '0';
    
// Toon real-time updates
const updatesElement = document.getElementById('realtimeUpdates');
if (data.aiAnalysis.queueSize > 0 || data.aiAnalysis.isProcessing) {
    updatesElement.style.display = 'flex';
    document.getElementById('updateMessage').textContent = 
        `${data.aiAnalysis.queueSize} profielen in wachtrij • ${data.aiAnalysis.isProcessing ? 'Analyse bezig' : 'Klaar'}`;
} else {
    updatesElement.style.display = 'none';
}
}

// Bereken aantal gezichten gevonden
const withFaces = aiAnalysisData.filter(item => item.age !== null).length;
document.getElementById('aiWithFaces').textContent = withFaces;
} catch (error) {
console.error('Error updating AI stats:', error);
}
}

function updateAIDisplay() {
const container = document.getElementById('aiResultsContainer');
const filteredCount = document.getElementById('filteredCount');
    
if (!container) return;

// Filter data op basis van huidige filters
const filteredData = aiAnalysisData.filter(item => {
// Leeftijd filter
if (item.age !== null) {
    if (item.age < currentFilters.minAge || item.age > currentFilters.maxAge) return false;
}
    
// Geslacht filter
if (currentFilters.gender !== 'any' && item.gender !== currentFilters.gender) return false;
    
// Confidence filter
if (item.confidence < currentFilters.minConfidence) return false;
    
return true;
});

filteredCount.textContent = `${filteredData.length} resultaten`;

if (filteredData.length === 0) {
container.innerHTML = '<p>Geen profielen gevonden die voldoen aan de filters.</p>';
return;
}

let html = '<div class="ai-results-grid">';
    
filteredData.forEach((item, index) => {
const genderIcon = item.gender === 'man' ? '👨' : item.gender === 'woman' ? '👩' : '❓';
const confidenceColor = item.confidence >= 85 ? '#4ecdc4' : item.confidence >= 70 ? '#ffd93d' : '#ff6b6b';
    
html += `
<div class="ai-result-card">
<div style="display: flex; align-items: center; gap: 15px;">
    ${item.profilePicUrl ? `
    <img src="${item.profilePicUrl}" alt="Profile" class="profile-image" 
         onerror="this.style.display='none'">
    ` : ''}
    <div style="flex: 1;">
        <div style="font-weight: bold; font-size: 16px;">${item.phoneNumber}</div>
        <div style="display: flex; gap: 15px; margin-top: 5px; font-size: 14px;">
            <span>${genderIcon} ${item.gender || 'Onbekend'}</span>
            <span>🎂 ${item.age ? item.age + ' jaar' : 'Onbekend'}</span>
            <span>📊 ${item.confidence || 0}% betrouwbaar</span>
        </div>
        <div class="confidence-meter" style="margin-top: 8px;">
            <div class="confidence-fill" style="width: ${item.confidence || 0}%; background: ${confidenceColor};"></div>
        </div>
    </div>
    <div>
        <button class="btn btn-sm btn-primary" onclick="openWhatsAppChat('${item.phoneNumber}')">
            💬 Chat
        </button>
    </div>
</div>
${item.analyzedAt ? `
<div style="font-size: 12px; color: #666; margin-top: 5px;">
    Geanalyseerd: ${new Date(item.analyzedAt).toLocaleString()}
</div>
` : ''}
</div>
`;
});

html += '</div>';
container.innerHTML = html;
}

// Filter functies
function selectGender(element) {
document.querySelectorAll('.gender-option').forEach(opt => opt.classList.remove('selected'));
element.classList.add('selected');
currentFilters.gender = element.getAttribute('data-gender');
}

// Update leeftijd displays
document.getElementById('minAge').addEventListener('input', function() {
const minAge = parseInt(this.value);
const maxAge = parseInt(document.getElementById('maxAge').value);
    
if (minAge > maxAge) {
document.getElementById('maxAge').value = minAge;
document.getElementById('maxAgeDisplay').textContent = minAge;
currentFilters.maxAge = minAge;
}
    
document.getElementById('minAgeDisplay').textContent = minAge;
currentFilters.minAge = minAge;
});

document.getElementById('maxAge').addEventListener('input', function() {
const maxAge = parseInt(this.value);
const minAge = parseInt(document.getElementById('minAge').value);
    
if (maxAge < minAge) {
document.getElementById('minAge').value = maxAge;
document.getElementById('minAgeDisplay').textContent = maxAge;
currentFilters.minAge = maxAge;
}
    
document.getElementById('maxAgeDisplay').textContent = maxAge;
currentFilters.maxAge = maxAge;
});

// Update confidence display
document.getElementById('minConfidence').addEventListener('input', function() {
const confidence = parseInt(this.value);
document.getElementById('confidenceDisplay').textContent = confidence + '%';
document.getElementById('confidenceFill').style.width = confidence + '%';
currentFilters.minConfidence = confidence;
});

async function applyAIFilters() {
try {
const response = await fetch(`${API_BASE}/ai-analysis/filter`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(currentFilters)
});

const data = await response.json();
if (data.success) {
aiAnalysisData = data.results;
updateAIDisplay();
}
} catch (error) {
console.error('Error applying AI filters:', error);
}
}

async function exportAIFiltered() {
const filteredData = aiAnalysisData.filter(item => {
if (item.age !== null) {
    if (item.age < currentFilters.minAge || item.age > currentFilters.maxAge) return false;
}
if (currentFilters.gender !== 'any' && item.gender !== currentFilters.gender) return false;
if (item.confidence < currentFilters.minConfidence) return false;
return true;
});

if (filteredData.length === 0) {
alert('❌ Geen gefilterde data om te exporteren');
return;
}

const numbers = filteredData.map(item => item.phoneNumber);

try {
const response = await fetch(`${API_BASE}/export-numbers`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ numbers, format: 'csv' })
});

const data = await response.json();
if (data.success) {
// Download het bestand
const blob = new Blob([data.content], { type: data.mimeType });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `ai-gefilterde-nummers-${new Date().toISOString().split('T')[0]}.csv`;
a.click();
URL.revokeObjectURL(url);
alert(`✅ ${filteredData.length} AI-gefilterde nummers geëxporteerd!`);
} else {
alert('Fout bij exporteren: ' + data.error);
}
} catch (error) {
alert('Fout bij exporteren: ' + error.message);
}
}

// Real-time updates voor AI analyse
function startAIUpdates() {
// Poll voor updates elke 3 seconden
setInterval(() => {
loadAIAnalysis();
updateAIStats();
}, 3000);
}

// WhatsApp chat functie
function openWhatsAppChat(phoneNumber) {
const cleanNumber = phoneNumber.replace(/\D/g, '');
const whatsappUrl = `https://api.whatsapp.com/send/?phone=${cleanNumber}&text=Hallo&app_absent=0`;
window.open(whatsappUrl, '_blank');
}

// Configuratie functies
async function loadConfig() {
try {
const response = await fetch(`${API_BASE}/config`);
const config = await response.json();
document.getElementById('numverifyKey').value = config.numverify_key || '';
} catch (error) {
console.error('Error loading config:', error);
}
}

async function saveConfig() {
const numverifyKey = document.getElementById('numverifyKey').value;

try {
const response = await fetch(`${API_BASE}/config`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ numverify_key: numverifyKey })
});

const result = await response.json();
if (result.success) {
alert('Configuratie opgeslagen!');
} else {
alert('Fout: ' + result.error);
}
} catch (error) {
alert('Fout bij opslaan configuratie: ' + error.message);
}
}

async function checkSystemStatus() {
try {
const response = await fetch(`${API_BASE}/health`);
const status = await response.json();
    
const container = document.getElementById('systemStatus');
container.innerHTML = `
<div class="stat-card">
<div class="stat-number">${status.whatsappClients}</div>
<div class="stat-label">WhatsApp Clients</div>
</div>
<div class="stat-card">
<div class="stat-number">${status.readyClients}</div>
<div class="stat-label">Verbonden</div>
</div>
<div class="stat-card">
<div class="stat-number">${status.configuredAccounts}</div>
<div class="stat-label">Geconfigureerd</div>
</div>
<div class="stat-card">
<div class="stat-number">${status.groups}</div>
<div class="stat-label">Groepen</div>
</div>
`;
} catch (error) {
console.error('Error checking system status:', error);
}
}

// Initialisatie
document.addEventListener('DOMContentLoaded', function() {
updateCarriers('NL');
loadWhatsAppStatus();
checkSystemStatus();
loadConfig();
loadRotationConfig();
loadPausedChecks();

// Start AI updates als AI tab actief is
if (document.getElementById('ai-analysis').classList.contains('active')) {
loadAIAnalysis();
startAIUpdates();
}

// Auto-refresh WhatsApp status elke 10 seconden
setInterval(loadWhatsAppStatus, 10000);
});
</script>
</body>
</html>