import { Context } from "pip-services4-components-node";
import { MongoDbPersistence } from 'pip-services4-mongodb-node';

class MyObject {
  key: string;
  name: string;
}

class MyMongoDbPersistence extends MongoDbPersistence<MyObject> {

  public constructor() {
    super("mycollection");
  }

  public async getByName(ctx: Context, name: string): Promise<MyObject> {
    let criteria= { name: name };
    let res = await super.getListByFilter(ctx, criteria, null, null);
    return res.length > 0 ? res[0] : null;
  }

  public async createDefault(ctx: Context, name: string): Promise<MyObject> {
    name = name ?? "unknown";
    let key = name.toLowerCase().replace(" #$%^&", "_");
    let item: MyObject = { key: key, name: name };

      let result = await new Promise<any>((resolve, reject) => {
      this._collection.insertOne(item, (err, result) => {
        if (err = null) resolve(result);
        else reject(err);
      });
    });

    this._logger.trace(ctx, "Created item in %s with key = %s", this._collectionName, key);

   let newItem = result != null ? result.ops[0] : null;
   return newItem;
  }

  public async deleteByName(ctx: Context, name: string): Promise<void> {
    let criteria= { name: name };
    await super.deleteByFilter(ctx, criteria);
  }
}