'provider + keys[] required']);break;} $activated = []; foreach($keys as $key) { $key = pg_escape_string($db, $key); $r = pg_query($db, "UPDATE ia_provider_accounts SET api_key='$key', status='active', key_created_at=NOW(), updated_at=NOW() WHERE id=(SELECT id FROM ia_provider_accounts WHERE provider_name='$provider' AND status='pending' ORDER BY id LIMIT 1) RETURNING id, persona_id"); $row = pg_fetch_assoc($r); if($row) $activated[] = $row; } echo json_encode(['status'=>'success','provider'=>$provider,'activated'=>count($activated),'accounts'=>$activated]); break; case 'activate_one': // Quick: activate first pending for provider $provider = $data['provider'] ?? ''; $key = pg_escape_string($db, $data['api_key'] ?? ''); if(!$provider||!$key){echo json_encode(['error'=>'provider + api_key required']);break;} $r = pg_query($db, "UPDATE ia_provider_accounts SET api_key='$key', status='active', key_created_at=NOW() WHERE id=(SELECT id FROM ia_provider_accounts WHERE provider_name='$provider' AND status='pending' ORDER BY id LIMIT 1) RETURNING id"); $row = pg_fetch_assoc($r); echo json_encode($row ? ['status'=>'success','id'=>$row['id'],'provider'=>$provider] : ['error'=>'No pending account']); break; case 'clone_key': // Use SAME key for ALL pending accounts of a provider (when provider allows) $provider = $data['provider'] ?? ''; $key = pg_escape_string($db, $data['api_key'] ?? ''); $limit = (int)($data['limit'] ?? 178); // How many to activate if(!$provider||!$key){echo json_encode(['error'=>'provider + api_key required']);break;} $r = pg_query($db, "UPDATE ia_provider_accounts SET api_key='$key', status='active', key_created_at=NOW() WHERE provider_name='$provider' AND status='pending' AND id IN (SELECT id FROM ia_provider_accounts WHERE provider_name='$provider' AND status='pending' ORDER BY id LIMIT $limit) RETURNING id"); $count = pg_affected_rows($r); echo json_encode(['status'=>'success','provider'=>$provider,'activated'=>$count,'note'=>'Same key cloned - tokens shared across accounts']); break; case 'status': $r = pg_query($db, "SELECT provider_name, COUNT(*) as total, SUM(CASE WHEN status='active' THEN 1 ELSE 0 END) as active, SUM(CASE WHEN status='pending' THEN 1 ELSE 0 END) as pending, SUM(tokens_limit_daily) as budget FROM ia_provider_accounts GROUP BY provider_name ORDER BY SUM(tokens_limit_daily) DESC"); $providers = []; while($row=pg_fetch_assoc($r)) $providers[] = $row; $totals = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as total, SUM(CASE WHEN status='active' THEN 1 ELSE 0 END) as active, SUM(CASE WHEN status='pending' THEN 1 ELSE 0 END) as pending, SUM(tokens_limit_daily) as budget, COUNT(DISTINCT provider_name) as providers, COUNT(DISTINCT persona_id) as personas FROM ia_provider_accounts")); echo json_encode(['status'=>'success','totals'=>$totals,'providers'=>$providers]); break; case 'pending_summary': $r = pg_query($db, "SELECT provider_name, signup_url, COUNT(*) as pending_count FROM ia_provider_accounts WHERE status='pending' AND signup_url IS NOT NULL GROUP BY provider_name, signup_url ORDER BY COUNT(*) DESC"); $summary = []; while($row=pg_fetch_assoc($r)) $summary[] = $row; echo json_encode(['status'=>'success','pending'=>$summary,'curl_one'=>"curl -s -X POST 'http://89.167.40.150:5821/api/ia-mass-activate.php' -H 'Content-Type: application/json' -d '{\"action\":\"activate_one\",\"provider\":\"PROVIDER\",\"api_key\":\"KEY\"}'", 'curl_clone'=>"curl -s -X POST 'http://89.167.40.150:5821/api/ia-mass-activate.php' -H 'Content-Type: application/json' -d '{\"action\":\"clone_key\",\"provider\":\"PROVIDER\",\"api_key\":\"KEY\"}'", 'note'=>'clone_key uses same API key for all pending accounts of that provider']); break; }