con = Database::get('main'); } /** * Get an available account for a specific platform that hasn't been used too recently. * * @param string $platform 'facebook' or 'instagram' * @param int $cooldownMinutes Minimum minutes since last active * @return array|null Account details or null if none available */ public function getAvailableAccount($platform, $cooldownMinutes = 30) { // Select an active account that was last active more than X minutes ago, // or has never been active (last_active is NULL). // Order by last_active ascending to rotate through them (least recently used first). $stmt = $this->con->prepare(" SELECT id, username, total_posts, total_comments, proxy_ip, proxy_port, proxy_username, proxy_password FROM social_accounts WHERE platform = ? AND status = 'active' AND (last_active IS NULL OR last_active <= DATE_SUB(NOW(), INTERVAL ? MINUTE)) ORDER BY last_active ASC, id ASC LIMIT 1 "); $stmt->execute([$platform, $cooldownMinutes]); return $stmt->fetch(PDO::FETCH_ASSOC); } /** * Update the last active timestamp for an account */ public function markAccountActive($accountId) { $stmt = $this->con->prepare("UPDATE social_accounts SET last_active = NOW() WHERE id = ?"); $stmt->execute([$accountId]); } /** * Increment comment count */ public function incrementCommentCount($accountId) { $stmt = $this->con->prepare("UPDATE social_accounts SET total_comments = total_comments + 1, last_active = NOW() WHERE id = ?"); $stmt->execute([$accountId]); } /** * Mark an account as restricted or banned */ public function markAccountStatus($accountId, $status) { if (!in_array($status, ['active', 'restricted', 'banned'])) return false; $stmt = $this->con->prepare("UPDATE social_accounts SET status = ? WHERE id = ?"); return $stmt->execute([$status, $accountId]); } }