prepare("SELECT * FROM companies WHERE phone_number_id = ? AND is_active = 1 LIMIT 1"); $stmt->execute([$phoneNumberId]); $row = $stmt->fetch(); return $row ?: null; } public static function findById(int $id): ?array { $stmt = db()->prepare("SELECT * FROM companies WHERE id = ? LIMIT 1"); $stmt->execute([$id]); $row = $stmt->fetch(); return $row ?: null; } public static function findByApiKey(string $apiKey): ?array { $stmt = db()->prepare("SELECT * FROM companies WHERE api_key = ? AND is_active = 1 LIMIT 1"); $stmt->execute([$apiKey]); $row = $stmt->fetch(); return $row ?: null; } public static function findAll(bool $includeInactive = false): array { $where = $includeInactive ? '1=1' : 'is_active = 1'; return db()->query("SELECT * FROM companies WHERE {$where} ORDER BY name")->fetchAll(); } public static function save(array $data): int { $db = db(); $id = (int)($data['id'] ?? 0); $fields = ['name', 'display_name', 'api_base_url', 'api_key', 'bot_type', 'requires_approval', 'is_active', 'config_json', 'erp_active_users']; $params = []; $sets = []; foreach ($fields as $f) { if (array_key_exists($f, $data)) { $sets[] = "{$f} = ?"; $params[] = is_array($data[$f]) || is_object($data[$f]) ? json_encode($data[$f]) : $data[$f]; } } if ($id > 0) { $params[] = $id; $stmt = $db->prepare("UPDATE companies SET " . implode(', ', $sets) . " WHERE id = ?"); $stmt->execute($params); return $id; } else { // Ensure required fields $required = ['name', 'api_base_url']; $insertData = []; foreach ($required as $r) { $insertData[$r] = $data[$r] ?? ''; } foreach ($fields as $f) { if (array_key_exists($f, $data)) { $insertData[$f] = $data[$f]; } } $cols = implode(', ', array_keys($insertData)); $vals = implode(', ', array_fill(0, count($insertData), '?')); $stmt = $db->prepare("INSERT INTO companies ({$cols}) VALUES ({$vals})"); $stmt->execute(array_values($insertData)); return (int)$db->lastInsertId(); } } public static function delete(int $id): bool { $stmt = db()->prepare("DELETE FROM companies WHERE id = ?"); $stmt->execute([$id]); return $stmt->rowCount() > 0; } }