// Licensed to the LF AI & Data foundation under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once
#ifdef ENABLE_SW_ARCH

#include "Database.h"

namespace VectorDB {

class SwClientImpl : public Database {
public:
    Status Connect(const ConnectParam& connect_param) override;
    Status Disconnect() override;
    Status CreateCollection(const CollectionSchema& schema, const IndexDesc& index_desc) override;
    Status CreateCollection(const std::string& collection_name, int dim, bool auto_id,
                            bool enable_dynamic_field) override;
    Status HasCollection(const std::string& collection_name, bool& has) override;
    Status DropCollection(const std::string& collection_name) override;
    Status Insert(const std::string& collection_name, const std::vector<FieldDataPtr>& fields,
                  DmlResults& results) override;
    Status Delete(const std::string& collection_name, const std::string& expression, DmlResults& results) override;
    Status Upsert(const std::string& collection_name, const std::vector<FieldDataPtr>& fields,
                  DmlResults& results) override;
    Status Search(const SearchArguments& arguments, SearchResults& results, int timeout) override;
    Status Query(const QueryArguments& arguments, QueryResults& results, int timeout) override;
    Status LoadCollection(const std::string& collection_name) override;
    Status ReleaseCollection(const std::string& collection_name) override;
};
}  // namespace VectorDB
#endif
